第一次使用暴力解法超时了
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
i = j = k = 0
for i in range(len(nums)):
while sum(nums[i:j])<=target:
if nums[i:j] == target:
if k>j-i+1:
k = j-i+1
break
j = j+1
i = i+1
return k
题解使用滑动窗口
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
两个for循环,一个循环的索引指向子序列的起始位置,一个循环的索引指向子序列的终止位置。当只用一个for循环时,这个循环的索引一定表示滑动窗口的终止位置。
因此,当窗口中的sum小于target时,for循环控制窗口的终止位置向后移,当sum大于target时,记录窗口中元素个数,窗口起始位置向后移。
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
i = res = sum = 0
j = 0
for j in range(len(nums)):
sum = sum + nums[j]
while sum>=target:
if res == 0:
res = j-i+1
if res>j-i+1:
res=j-i+1
sum = sum - nums[i]
i = i+1
j = j + 1
return res