算法之滑动窗口

滑动窗口_长度最小的子数组

209. 长度最小的子数组 - 力扣(LeetCode)

这道题用滑动窗口(同向双指针) 解决,需要抓住一个关键性质:数组里全是正整数,所以子数组的总和随长度增加而单调递增

这就是"利用单调性,规避很多没有必要枚举"的含义。


一、为什么可以用滑动窗口?

因为所有元素都是正整数:

  • 向右扩展窗口(right++)→ 总和一定变大或不变。

  • 向左收缩窗口(left++)→ 总和一定变小

因此一旦窗口总和达到 target,再往右扩张只会让总和更大、长度更长,不会得到更优解。所以此时应该尝试收缩左边界,看看更短的子数组是否依然 ≥ target


二、算法步骤

  1. 初始化
    left = 0, sum = 0, min_len = INT_MAX

  2. 右指针逐个进入窗口
    for right = 0 to n-1:

    • 进窗口sum += nums[right]

    • 判断 + 出窗口
      while (sum >= target) {

        更新结果min_len = min(min_len, right - left + 1)

        出窗口sum -= nums[left]; left++;
      }

  3. 循环结束后,如果 min_len 还是 INT_MAX,说明没有符合条件的子数组,返回 0;否则返回 min_len

相关推荐
JieE21210 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2018 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树20 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2121 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2121 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架