力扣刷题-长度最小的子数组
题目描述
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
1
2
3
|
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
|
1
2
|
输入:target = 4, nums = [1,4,4]
输出:1
|
1
2
|
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
|
1
2
3
|
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105
|
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
l = len(nums)
left = 0
flag = True
minlen = 1e5+1
sum = 0
for i in range(0,l):
sum += nums[i]
while sum >= target:
flag = False
sum = sum - nums[left]
minlen = min(minlen,i-left+1)
left+=1
if flag:
return 0
return minlen
|