题目链接🔗:
977. 有序数组的平方
209. 长度最小的子数组
59.螺旋矩阵II
有序数组的平方
这道题目一开始没有想明白怎么在空间是 O(1)的情况下排序,后来又开了一个用于返回的数组,做法是找到第一个大于 0 的元素,然后用双指针,我的做法是平方后把原本是负数的元素顺序翻转了,之后一个指针指向原本为正数的第一个元素,另一个指针指向数组第一个元素,然后循环两个指针排序,后来发现好蠢,直接两个指针都从第一个正数元素开始,一个向前一个向后就可以,完全没有必要翻转。(后来看官方的题解给的也是开辟了一个用于返回的数组,解释说返回的不算空间,有点迷惑)
长度最小的子数组
一开始是想的用前缀和,但是后边就没有思路了。
换了思路还是用的双指针,一个快指针先向前求和,当满足和大于等于目标之后,尝试移动慢指针,如果删除原本慢指针指向元素后,还可以满足和大于目标,就进行移动,在这个移动过程中维护一个值用来记录最小的元素数目,最后返回 result 。
看了题解的前缀和解法,是用了前缀和加二分查找,因为原数组元素都是正数,前缀和必然有序,遍历一次前缀和,就可以为每个元素找到最小的可满足子数组。
螺旋矩阵
模拟题目,没有看题解,之前好像做过类似题目,拆分成对由左到右,由上到下,由右到左,由下到上四个过程,用四个变量表示上下左右的边界,在一个循环中,当用于记录已赋值元素数量 temp 数量到达 n * n,跳出循环,返回结果。
总结:
对于数组的双指针还是能想到的,但是像前缀和和二分查找的合并,或者说想到数组是一个有序的应该可以下意识想到使用二分查找的直觉还是没有。