Ling-Algorithm-滑动窗口
209. 长度最小的子数组
最优解法
时间复杂度 O(n)(左指针和右指针各移动 n),空间复杂度 O(1)
right从左到右移动,当sum-nums[left]>=target时,left循环向左移动,且sum-=nums[left]
如果sum>=target符合条件,则判断是否需要更新答案。
注意:right-left+1是子数组长度
1 | /** |
713. 乘积小于 K 的子数组
最优解法
时间复杂度 O(n),空间复杂度 O(1)
right从左向右移动,循环prod/nums[left]直到prod<k,
此时计算以当前右端点结尾的所有子数组的数量:right-left+1([l,r], [l+1,r] ... [r,r])
1 | /** |
3. 无重复字符的最长子串
最优解法
时间复杂度 O(n),空间复杂度 O(1)(map 的长度最大为 26)
维护一个
map,记录字符出现的次数。right从左到右移动,如果当前字符出现次数大于1,则循环右移left(删除左侧字符),直到当前字符第一次出现。right-left+1即为当前子串长度,判断是否更新答案
1 | /** |
- Title: Ling-Algorithm-滑动窗口
- Author: Gabrielle
- Created at : 2026-02-11 20:00:43
- Updated at : 2026-05-12 00:12:41
- Link: https://zoella-w.github.io/2026/02/11/97-Ling-Algorithm-滑动窗口/
- License: This work is licensed under CC BY-NC-SA 4.0.