使用两个变量begin和end来表示nums[begin,end]间所有元素的和,当和sum大于等于目标s时,开始收缩区间[begin,end]直到sum小于s,取得区间长度的最小值即为答案。
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int res = INT_MAX;
int n = nums.size();
if(n<=0)return 0;
int begin = 0,end = 0;
int sum =0;
for(int i=0;i<n;i++){
if(nums[i]>=s)return 1;
sum+=nums[i];
end=i;
while(sum>=s){
res = min(res,end-begin+1);
sum -=nums[begin];
begin++;
}
}
return res==INT_MAX?0:res;
}
};