#209. 长度最小的子数组
题目
给定数组nums,和target,找到长度最小的和大于等于target的子数组,返回长度。
解答
滑动窗口解法
双指针,left,i。
增加 i 直到 left … i 之间的sum大于等于target。
把left往右移,同时把sum[left]减掉,直到sum小于target。
增加 i ,循环上述过程。
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
total = 0
left = 0
min_length = sys.maxint
for i in range(len(nums)):
total += nums[i]
while(total >= target):
subsize = i - left + 1
min_length = subsize if subsize < min_length else min_length
total -= nums[left]
left += 1
return 0 if (min_length == sys.maxint) else min_length
收获:
- 双指针滑动窗口,非常妙