滑动窗口
-
滑动窗口要求
nums 中的数全部是正整数;右指针 r 右移 窗口和只会变大;左指针 l 右移 窗口和只会变小
单调性成立;非常适合「先扩张、再收缩」的滑动窗口
用右指针扩张窗口,直到和 ≥ target;然后用左指针收缩窗口,尽可能变短 -
209
-
while和if
在滑动窗口里:while:窗口可以连续收缩;if:窗口最多收缩一次
只要“收缩可能不止一次”,就必须用 while
![image]()
![image]()
![image]()
-
int result = INT32_MAX;我目前还没有找到任何合法答案
result = 当前找到的最小长度;不断尝试用更小的长度更新它;result = min(result, 当前窗口长度);
![image]()
![image]()
![image]()
-
return result == INT32_MAX ? 0 : result;如果 result 还是 INT32_MAX,说明没找到合法子数组,返回 0;否则返回找到的最小长度 result
-
条件 ? 条件为真时的值 : 条件为假时的值
if (result == INT32_MAX) {
return 0;
} else {
return result;}
- 643
-
窗口长度是固定的(永远等于 k)
这意味着什么?
没有「合法 / 不合法」;没有「尽可能短 / 尽可能长」;没有 while;
左指针每次跟着右指针一起走一步;这是最简单、最干净的滑动窗口 -
思路:for循环初始化第一个窗口,令此时窗口a;再次for左进右出,窗口同时滑动,令此时窗口为b,选出ab中最大的,注意左右边界如何确定;最后返回时类型转换
- 713







浙公网安备 33010602011771号