题目:
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
参考:
代码:
C++:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int res = INT32_MAX;
int sum = 0;
int i = 0;
int resl = 0;
for(int j=0; j<nums.size(); j++){
sum += nums[j];
while(sum >= target){
resl = j-i+1;
res = res < resl ? res : resl;
sum -= nums[i++];
}
}
return res == INT32_MAX ? 0 : res;
}
};
Python3:
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
l, r, n = 0, 0, len(nums)
res = float('inf') # 正无穷大
res_sum = 0
for i in range(n):
res_sum += nums[i]
while res_sum >= target:
res = min(res, r-l+1)
res_sum -= nums[l]
l += 1
r += 1
return res if res != float('inf') else 0