977有序数组平方
- 核心思想:滑动窗口,双向而动
左指针:从0开始,向右滑动
右指针:从末尾开始,向左滑动
2.细节理解:
1)从两端得到的值为较大值,顺着这个思路先找到的是最大值,也就是要放在数组的最右边;因此需要构建一个与原来数组一样大小的空数组,利用数组指针直接给最右边的数组赋值
2)while条件设置时: while start <= end ,需要考虑相等的情况(经常错)
3.参数设计:
左右指针:start, end
新数组:newNums = [1] * len(nums)
209长度最小的子数组
- 核心思想理解:滑动窗口方法:同向而动
左指针:从0开始,一开始不动
右指针:从0开始一直向右滑动,最终条件是达到数组的长度
- 细节理解:
1)考虑不达条件的corner case:找不到大于target的连续元素的和,包含了空值;(易错)
if sum(nums) < target:
return 0
另外的方式是:
if not nums:
return 0
# 以及在末尾的时候考虑从来没有进入 sum >=
return 0 if minl = len(nums) else minl
2)左边指针向左滑动的场景:
达到条件: while sum >=target (没有考虑相等的情况)(易错)
先减掉左边指针对应的元素值,再将左指针+1(易错)
3.常见参数
左右指针 start, end
累加值 total
最小长度记录 minl = len(nums) , 求最小值
minl = min (minl, right - left + 1)