977.有序数组的平方
- 双指针,根据数据结构特点决定的。最后进行反转。
- 反转也可以通过i--实现
- Python提供的便捷接口也可以了解一下,
sorted(x*x for x in nums)
209.长度最小的子数组
- 双指针的应用,滑动窗口
- 滑动窗口的灵魂拷问
窗口内是什么?
如何移动窗口的起始位置?
如何移动窗口的结束位置?
用什么数据结构实现?
- 两个for循环,固定起始位置,倘若固定了终止位置,就可以减少一个for循环。
- 不需要排序
- 每次j++了,立即往窗口上加上nums[j]
- 先处理逻辑,再移动指针
- 移动左指针的时候,是需要while。因为在这个循环里面j不动了,需要调整好了i之后,再次移动j
- Again debug 更加深了对模型的理解
59.螺旋矩阵II
- 循环不变量
- python中[[0]*3]*3是浅拷贝,更改了[0][0]之后,是更改一列。所以不可以这么用
54. 螺旋矩阵
- 掌握好循环不变量的基础上,靠着debug出来的端点细节
-
>>> a=[[0]*3]*3 >>> a [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> a[0][0]=1 >>> a [[1, 0, 0], [1, 0, 0], [1, 0, 0]] >>> >>> >>> b=[[0]*3 for _ in range(3)] >>> b [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> b[0][0]=1 >>> b [[1, 0, 0], [0, 0, 0], [0, 0, 0]] >>> >>> >>> c=[[0 for _ in range(3)] for _ in range(3)] >>> c [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> c[0][0]=1 >>> c [[1, 0, 0], [0, 0, 0], [0, 0, 0]] >>> >>> >>> d=[0]*3 >>> d[0]=1 >>> d [1, 0, 0]
904. 水果成篮
- 字典+滑动窗口
- 什么时候取到长度-->是字典里的非0的key小于等于2的时候,也就是while移动完成之后,不需要特殊条件了
for j in range(len(fruits)):
basket[fruits[j]] += 1
#print(basket)
while len(basket) > 2:
basket[fruits[i]] -= 1
if basket[fruits[i]] == 0:
basket.pop(fruits[i])
i += 1
res = max(res,j-i+1)
- 字典的长度可以直接用len()
76. 最小覆盖子串
- 取得字符串的时候,不必从数组里面真正的拿,只要记住和更新左右边界就可以、
- 若return “”时,边界条件应该怎么处理,
-
return "" if ans_left < 0 else "".join(s_str[i:j+1])