leetcode - 209. 长度最小的子数组
题目
代码
#include
#include
using namespace std;
// 方法一:暴力法
int minSubArrayLen1(int target, vector& nums) {
int n = nums.size();
if(n == 0){
return 0;
}
if(nums[0] >= target){
return 1;
}
int res = INT_MAX;
int sum = 0, count = 0;
for(int i = 1; i < n; i++){
if(nums[i] >= target){
res = 1;
break;
}
sum += nums[i];
count++;
for(int j = i - 1; j >= 0; j--){
sum += nums[j];
count++;
if(sum >= target){
res = min(res, count);
break;
}
}
sum = 0;
count = 0;
}
if(res == INT_MAX){
res = 0;
}
return res;
}
// 方法二:滑动窗口
int minSubArrayLen(int target, vector& nums) {
int n = nums.size();
if(n == 0){
return 0;
}
if(nums[0] >= target){
return 1;
}
int ans = INT_MAX;
int left = 0, right = 0;
int sum = 0;
while(right < n){
sum += nums[right];
while(sum >= target){
ans = min(ans, right - left + 1);
sum -= nums[left];
left++;
}
right++;
}
if(ans == INT_MAX){
ans = 0;
}
return ans;
}
int main(){
int n, target, res;
cin>>n>>target;
vector nums(n);
for(int i = 0; i < n; i++){
cin>>nums[i];
}
res = minSubArrayLen(target, nums);
cout<