day2:打卡,数组part02
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
由于之前在代码随想录网站上也按照顺序刷过三章节的题,所以看到题目的那一刻我知道可以用双指针法,但是脑袋里也仅限于双指针法这四个字了,因为之前刷过的题用到的方法现在已经忘得差不多了。
废话不多说,我对这道题的第一个思路就是定义首尾两个指针,让右边的指针和左边的指针比较,如果右边指针所指数小于左边指针,那么将两数调换位置后右指针往左移一个继续比较,当右指针移动到左指针右边时,左指针向右移动一个位置,但是这样的解法不就相当于暴力解法了。所以写到这我知道双指针法写错了。于是去看了卡哥的解析,想解决这个问题要注意两点。
1.注意循环终止的条件
不同于普通的循环,该题的循环终止条件为左指针小于等于右指针,因为本题数组平方后最大最小的数都是在最两边,所以两个指针向中间靠拢。
2.多定义一个结果数组
每对指针所对应的数比较后所得的较大的数放在新建的数组尾部
209.长度最小的子数组
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
代码随想录链接:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html
刚开始的思路也是左右指针一个在数组头部,另一个在数组尾部,然后定义一个左右指针相距的距离,但是在草稿纸上写伪代码时发现难以实现,于是又看了卡哥的解析发现该题虽然也要使用双指针但是有几个需要注意的点。
1.循环内判断总和和目标值时用while还是if?
当右指针移动到一定位置使得总和大于目标值时,如果是用if,那么可能会出现多余的步骤,例如数组为[1,1,1,1,1,100],目标值为100时,当右指针移动到100,符合条件,这个时候如果为if的话,那么左指针会一个一个移过来,会出现多余的步骤。
2.返回结果
返回结果时要和原来定义的结果值也就是MAX_VALUE再对比一下,如果循环结束时返回结果还是原来的那么说明没有符合条件的总和,结果返回0。
59.螺旋矩阵2
来的那么说明没有符合条件的总和,结果返回0。
59.螺旋矩阵2
个人感觉很复杂,特别是变量的定义,所以先不过多解释,需要慢慢练习