给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出: 2 解释: 子数组[4,3]
是该条件下的长度最小的连续子数组。
C++
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums)
{
int n=nums.size();
int left=0;
int right=0;
int sum=0;
int len=n+1;
while(right<n)
{
if(sum<s)
{
sum+=nums[right];
right++;
}
else
{
len=min(len,right-left);
sum-=nums[left];
left++;
}
}
while(sum>=s)
{
len=min(len,n-left);
sum-=nums[left];
left++;
}
return (n+1==len)?0:len;
}
};
python
class Solution:
def minSubArrayLen(self, s, nums):
"""
:type s: int
:type nums: List[int]
:rtype: int
"""
n=len(nums)
tmp=0
left=0
right=0
length=n+1
while right<n:
if tmp<s:
tmp+=nums[right]
right+=1
else:
length=min(length,right-left)
tmp-=nums[left]
left+=1
while tmp>=s:
length=min(length,n-left)
tmp-=nums[left]
left+=1
if length==n+1:
return 0
return length