day02 代码随想录算法训练营 209. 长度最小的子数组
题目:
我的感悟:
- 滑动窗口,
- 每次计算当前位置的值,
- 满足要求就缩小,
- 这样左右两个指针都不回退。一直右走。
- 这个原理,还没太理解,感觉要在看看左神的视频。
理解难点:
- 为什么可以不回退。
代码难点:
- for 循环右边界
- 里面while判断是否满足要求
总结概括:
- 无
代码示例:
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
left = 0
right = 0
sub_sum = 0
min_len = len(nums) + 1 # 默认初始的长度比数组最大的+1就可以了
for right in range(len(nums)):
sub_sum += nums[right]
while sub_sum >= target: # 窗口满足要求,找到值,可以记录,并缩写窗口了
min_len = min(min_len, right - left + 1) # 记录此时的长度
sub_sum -= nums[left] # 记录后,窗口不需要了,窗口值减小
left +=1 # 记录后,这个窗口就不需要了,左边界也右移
# 最后判断一下,如果没有满足要求的,返回0
# 特例是target = 11 ,nums = [1,1,1,1]
if min_len == len(nums) +1: # 如果没找到符合要求的
return 0
else: # 如果找到了返回最新的长度
return min_len
通过截图:
资料:
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/