没想到能一次运行成功。这也是双指针,不过昨天的是快慢指针,这个算是左右指针。从后往前填元素也是思维的一个小扩展。这样写还挺好理解的。时间复杂度为n,空间复杂度也是n。这道题还有暴力做法,全部平方原来数组元素后得到新数组,然后对新数组进行排序得到目标数组,这种方式的时间复杂度为n+logn*n,空间复杂度为1。但原数组实际上是已经有序的了,这种方式没有利用这一点造成时间复杂度偏高。
209.长度最小的子数组
题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili
这道题以前做过一次,但忘了,看了一遍视频讲解后,明白了答题思路,按思路写了代码提交成功。这题启发:算法复杂度看的是嵌套的最深的语句执行次数,所以这题相比于暴力解法,左指针并没有在右指针遍历到某一个位置的时候就跟着从头开始也遍历一遍到右指针位置截止,而是接着上次的位置继续向右移动直到区间元素和不满足要求,所以时间复杂度是O(n)。但是其中的本质原理似懂非懂,只是学会了滑动窗口法,知道它可以用于求最小长度子数组,后面还需要再深入体会。还有我的代码和卡哥参考代码有些许区别,我是遇到满足条件的子数组后先缩小然后求长度了,卡哥是先求长度然后缩小,卡哥那个逻辑性更强,虽然说我这个也能通过。
59.螺旋矩阵II
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili
之前做过一次,但忘了,只记得要运用循环不变量思想来处理边界取舍问题不混乱,先一圈一圈,后一段一段来处理赋值。然后花了不短时间理代码思路,但幸好能一次提交成功。感觉自己代码思路还比较清晰,虽然说不是最简洁的。