题目描述 : 209. 长度最小的子数组
考察算法:滑动窗口、双指针
AC code:
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
# 列表或者数组的长度
length = len(nums)
# 左指针和右指针
left,right = 0,0
# 求和用于和 target 进行比较
sum = 0
# 保留最短的长度,所以一开始取一个最大值
res = 1e5 + 10
# 用于标记是否有符合条件的连续子数组,如果没有,最后返回0
flag = False
# 外层循环,移动右指针
while right < length:
# 求和
sum = sum + nums[right]
# 当总数 >= target 的时候,移动左指针
# (也是滑动窗口算法比较关键的地方:找到移动左指针的条件)
while sum >= target:
# 取一个长度的最小值
res = min(res,right-left + 1)
# 标记为 True,说明已经至少找到一个符合条件的连续子数组
flag = True
# 移动左指针之前需要先把之前的 value 去除,才算是真正的移动
sum = sum - nums[left]
# 移动左指针
left += 1
# 移动右指针
right += 1
if flag == False:
res = 0
return res
滑动窗口模版:https://blog.csdn.net/weixin_44414948/article/details/113862173