题目

LeetCode刷题——209. 长度最小的子数组_leetcode

思路

可以利用滑动窗口的思路来解决此问题,即就像一个滑动的窗口,套在一个序列中,左右的滑动,根据窗口内的子序列进行判断。
本题先固定数字左端元素,然后右端元素不断右移,直到该子数组满足题意。然后将左端元素右移一个位置,继续此过程。

代码

class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
size = len(nums)
l,r = 0,-1 # 子数组[l,r]

min_length = size+1
sum_ = 0 # 保存当前子数组总和

while l < size:
# 如果当前sum_小于target
# 则将右端右移
if sum_ < target and r+1< size:
r += 1
sum_ += nums[r]
else:
# 否则 将左端右移一位
sum_ -= nums[l]
l += 1

# 判断当前sum_是否满足条件
if sum_ >= target and r-l+1 < min_length:
min_length = r - l + 1

return min_length if min_length != size+1 else 0

LeetCode刷题——209. 长度最小的子数组_leetcode_02