0%

209. 长度最小的子数组-滑动窗口

209. 长度最小的子数组

暴力o(n^2)超时呵呵呵,不是能做出来就好了吗啊吧啊吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum;
int min=100000;
int count;
for(int i=0;i<nums.size();i++){
sum=0;
for(int j = i;j<nums.size();j++){
sum+=nums[j];
if(sum>=target){
count=j-i+1;
min=min<count?min:count;
break;
}
}
if(min>nums.size()) min=0;
}
return min;
}
};

滑动窗口

思路是先让

sum+nums[j]

sum>=target的时候

算出子数组长度subL

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

```while```循环```nums[i++]```一直减到它```<target```退出```while```

用result记录min的subL

然后再次大循环从nums[j+1]





```c
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i=0;
int subL=0;
int sum=0;
int result=INT_MAX;
for(int j =0;j<nums.size();j++){
sum+=nums[j];
while(sum>=target){
subL=j-i+1;
sum-=nums[i];
result=min(result,subL);
i++;
}
}
return result==INT_MAX ? 0 : result;

}
};

如何理解

1
return result==INT_MAX ? 0 : result;

当result==INT_MAX时候

是 返回0

否 返回result

如何理解

1
result = result < subLength ? result : subLength;

当result<subL的时候

是 返回result

否 返回subL

-------------本文结束感谢您的阅读-------------
老板你好,讨口饭吃