方法一 暴力遍历
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size(), minLen = 100001;
if(n == 0)
return 0;
for(int i = 0; i < n; i++){
int sum = 0;
for(int j = i; j < n; j++){
sum += nums[j];
if(sum >= target){
minLen = min(minLen, j - i + 1);
break;
}
}
}
if(minLen == 100001)
return 0;
return minLen;
}
};
Accepted
19/19 cases passed (432 ms)
Your runtime beats 17.9 % of cpp submissions
Your memory usage beats 75.3 % of cpp submissions (10.2 MB)
方法二 滑动窗口
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size(), minLen = 100001, left = 0, right = 0;
if(n == 0)
return 0;
int sum = 0;
while(right < n){
sum += nums[right]; //窗口右扩
while(sum >= target){ //窗口左扩
sum -= nums[left];
minLen = min(minLen, right - left + 1);
left++;
}
right++;
}
if(minLen == 100001)
return 0;
return minLen;
}
};
Accepted
19/19 cases passed (8 ms)
Your runtime beats 63.43 % of cpp submissions
Your memory usage beats 75.3 % of cpp submissions (10.2 MB)