classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int ans = INT_MAX, count =0;int left =0, right =0;for(int i =0; i < nums.size(); i++){
count += nums[i];
right = i;if(count >= target){while(left <= right && count >= target){
count -= nums[left];
left++;}
left--;
count += nums[left];
ans =min(ans, right - left +1);}}return ans == INT_MAX ?0: ans;}};
代码(8.1 二刷自解)
classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int sum =0;int right =0, left =0;int res = INT_MAX;while(right < nums.size()){int num = nums[right];
right++;
sum += num;while(sum > target){
res =min(res, right - left);
sum -= nums[left];
left++;}if(sum >= target)
res =min(res, right - left);}return res == INT_MAX ?0: res;}};
代码(9.21 三刷自解)
classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int n = nums.size();int sum =0, len = n+1;int l =0, r =0;while(r < n){
sum += nums[r++];while(sum > target){
len =min(len, r-l);
sum -= nums[l++];}if(sum == target)
len =min(len, r-l);}return len == n+1?0: len;}};