数组专题学习安排与要点总结
一、209. 长度最小的子数组(滑动窗口)

🎯学习重点
- 第一次系统理解「滑动窗口」思想
- 理解「窗口不是固定大小,而是动态伸缩」
- 明确两个指针的含义:
left:窗口起点right:窗口终点
- 核心逻辑:
- 先扩张窗口(right++)
- 当条件满足时,尝试收缩窗口(left++)
- 明白:
- 为什么是
while (sum >= target) - 为什么可以在 O(n) 内完成
- 为什么是
⚠️ 学习建议
- 文字讲解偏抽象,建议直接看洛谷题解的动图 先理解「窗口在动」
我一开始想成先把数组换成升序数组,然后再从后面累加到大于 target 就好,
但忽略了题目中是要求 连续数组,所以不能用这种方法
- 这时候用滑动窗口就可以完美解决 自己解的代码如下
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int end = 0, ans = 1e6;
int sum = 0;
for (int start = 0; start < nums.size(); ) {
while (sum < target && end < nums.size()) {
sum += nums[end];
end++;
}
if (sum >= target) {
ans = min(ans, end - start);
sum -= nums[start];
start++;
} else break;
}
(ans == ) ;
ans;
}
};





