给定一个含有 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;}
};