-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathminimum-size-subarray-sum.cpp
More file actions
35 lines (30 loc) · 1.05 KB
/
minimum-size-subarray-sum.cpp
File metadata and controls
35 lines (30 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public:
//还是别人的解法牛啊!双指针法。每次给定右边界j,去寻找左边的极限。
int minSubArrayLen(int s, vector<int>& nums) {
if(s>accumulate(nums.begin(),nums.end(),0)) return 0;
int i=0,j=0,result=INT_MAX,sum=0;
while(j<nums.size()){
sum+=nums[j++];
while(sum>=s){
result=min(result,j-i);
sum-=nums[i++]; //对于j以及大于j的右边界来说,当前的左边界i已经没有保存的意义了。
}
}
return result;
}
//暴力解法竟然也可以过?!
int minSubArrayLen1(int s, vector<int>& nums) {
if(s>accumulate(nums.begin(),nums.end(),0)) return 0;
int result=INT_MAX;
for(int i=0;i<nums.size();i++){
int tmp=0;
int sum=s;
while(sum>0 && i+tmp<nums.size()){
sum-=nums[i+tmp++];
}
if(sum<=0) result=min(result,tmp);
}
return result;
}
};