给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
输入:s = 7, nums = [2,3,1,2,4,3]
输出: 2 解释: 子数组[4,3]
是该条件下的长度最小的连续子数组。
简析: 就是设置两个指针,从左到右,每次找到合适的和之前的比较,如果比之前的小的话就存起来,直到两个指针都到最右边。
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int i = 0,j = 0,ans = nums.size()+1,tmp = 0,cnt = 0;
while(j < nums.size()){
if(tmp < s){
tmp += nums[j++];
++cnt;
}
while(tmp >= s && i < j){
ans = ans < cnt ? ans : cnt;
if(i < j){
tmp -= nums[i++];
--cnt;
}
}
}
return ans == nums.size()+1?0:ans;
}
};