前置:
- 什么是滑动窗口
- -inf 与 inf 用法
- 理解滑动窗口主要弄清以下问题:
- 1、窗口内的数据代表着什么?
- 2、什么情况下需要扩展窗口右边界?
- 3、什么情况下需要收缩窗口左边界?
- 4、什么时候计算窗口大小?
题目1:长度最小的子数组
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
from typing import List
class Solution:
def minSubArrayLen(self, s: int, nums: List[int]) -> int:
sum=0
i=0
temp = float('inf')
for j in range(len(nums)): # 遍历数组种每一个item,并累加
sum+=nums[j]
while sum>=s: # 满足目标条件后,开始缩小窗口
L = j-i+1
temp = min(temp,L)
# 目标是计算sum>=s时的最小窗口程度,该目标与while条件一直,所以写在while里面
# 并在窗口左边界变化之前就计算窗口大小
sum-=nums[i]
i+=1
if temp==float('inf') :retu