977、有序数组的平方
题目建议: 本题关键在于理解双指针思想
题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html
视频讲解: https://www.bilibili.com/video/BV1QB4y1D7ep
联想:
我一开始想到的暴力解法是用冒泡排序的,但是TLE了,应该使用快排。看了题解之后发现,根据数组的特性,最大的元素一定出现在两边,因此可以让两个指针向中间靠拢遍历数组。
问题:
看了题解之后,自己写了一遍就ac了。自己用暴力法实现的时候,冒泡排序和快速排序不太熟悉。
今日收获:
双指针法太妙了,虽然提示了用双指针法,但是想到的用法还是不对,忽略了本题中数组的特性。
209.长度最小的子数组
题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
视频讲解:https://www.bilibili.com/video/BV1tZ4y1q7XE
联想:初始思路是两个for循环暴力列举所有的子序列,题解的思路是滑动窗口,用一个for实现,j代表的是终止位置的下标,关键在于如何移动起始位置。
问题:
全局变量和局部变量的把握不准确,要注意定义的全局变量在进入循环内的变化;时间复杂度为什么是O(n),暂时不理解。
收获:
滑动窗口的精髓在于根据当前窗口和的大小动态调整窗口的长度。
59.螺旋矩阵II
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
文章讲解:https://programmercarl.com/0059.%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5II.html
视频讲解:https://www.bilibili.com/video/BV1SL4y1N7mV/
联想:
这道题完全没思路,边界条件处理不明白。
问题:
看了题解之后,懂了又没完全懂。
收获:
注意用vector定义并初始化二维数组的方式:vector<vector<int>> res(n,vector<int>(n,0));
循环不变量原则的关键应用场景就是对边界的处理,这里题解采用的区间写法是左闭右开。