leetcode链接
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环完成了一个不断搜索区间的过程。
滑动窗口则使用一个for循环来完成这个操作。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
left = 0
right = 0
num_sum = 0
length = len(nums)+1
while right<len(nums):
num_sum += nums[right]
while num_sum>=target: # 注意while判断>=而不是<,不能用if
length = min(length,right-left+1)
num_sum -= nums[left]
left += 1
right += 1
if length == len(nums)+1:
return 0
else:
return length
class Solution:
def minSubArrayLen(self, s: int, nums: List[int]) -> int:
l = len(nums)
min_len = float('inf')
for i in range(l):
cur_sum = 0
for j in range(i, l):
cur_sum += nums[j]
if cur_sum >= s:
min_len = min(min_len, j - i + 1)
break
return min_len if min_len != float('inf') else 0