力扣60天刷题挑战 | day2 数组

96 阅读1分钟

977有序数组平方

leetcode.cn/problems/sq…

  1. 核心思想:滑动窗口,双向而动

左指针:从0开始,向右滑动

右指针:从末尾开始,向左滑动

2.细节理解:

1)从两端得到的值为较大值,顺着这个思路先找到的是最大值,也就是要放在数组的最右边;因此需要构建一个与原来数组一样大小的空数组,利用数组指针直接给最右边的数组赋值

2)while条件设置时: while start <= end ,需要考虑相等的情况(经常错)

3.参数设计:

左右指针:start, end

新数组:newNums = [1] * len(nums)

209长度最小的子数组

leetcode.cn/problems/mi…

  1. 核心思想理解:滑动窗口方法:同向而动

左指针:从0开始,一开始不动

右指针:从0开始一直向右滑动,最终条件是达到数组的长度

  1. 细节理解:

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)