代码随想录Day2 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

585 阅读2分钟

977 有序数组的平方

题目链接:977.有序数组的平方 - 力扣 LeetCode

这道题我们第一想法就是暴力解法,将数组的每个数直接平方求解,然后再来个排序,美汁汁!!

暴力代码:

image.png

当然,我们不能直接就暴力解决(偶尔玩一下还是可以哒),否则面试官也会暴力的把咱们请出去,所以第二种方法就是双指针解法

双指针解法: 因为平方后不管正数还是负数都会变成正数,所以平方后的最大值要么是最左边的值,要么是最右边的值,所以我们可以用双指针控制左右一步一步往中间缩进,然后再用一个变量去控制新数组的位置就可以了

双指针代码:

image.png

209 长度最小的子数组

题目链接209.长度最小的子数组 - 力扣 LeetCode

这道题我们第一想法就是暴力递归,但是还是那句话,咱们暴力,面试官也会暴力~~~

暴力代码:

image.png

当然,我们还有第二种,滑动窗口(其实本质就是双指针),我们用两个指针移动来确定数组的区间, 当区间的数大于等于target时,我们就计算一次长度,并且减去最左面的数,重新确定区间,然后左指针 右移动,我们需要注意的是,当总和超过target时,我们需要用while判断,因为总和减去left位置对应的值后依然可能大于等于target,所以我们不能用if来判断

代码如下:

image.png image.png

59 螺旋矩阵II

题目链接 59.螺旋矩阵II - 力扣 LeetCode

螺旋矩阵其实这道题没有考察算法,而是考察我们对代码的一个掌控能力,看起来不难,但是细节非常多 稍微有一个不注意就会出现错误,我们需要遵循不变量的原则,要么全定义为左闭右开,要么全定义左开右闭(左开右开和左闭右闭不可以呦) 剩下的就是代码的控制了

代码如下:

image.png