给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0
思路:滑动窗口,遍历数组元素并相加求和,当前和大于等于target那么就与ans比较并更新ans,滑动窗口的初始点++,当前和减去初始点的值,然后继续遍历,重复上述步骤
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int ans=INT_MAX;
//当前满足条件的长度
int len=0;
//i为起始点
int i=0;
int sum=0;
//j为终止点
for(int j=0;j<nums.size();j++)
{
sum+=nums[j];
while(sum>=target)
{
len=j-i+1;
if(len<ans)
{
ans=len;
}
sum-=nums[i++];
}
}
if(ans==INT_MAX)
{
return 0;
}
return ans;
}
};