算法之滑动窗口

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

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。

相关推荐
专注仿真1 小时前
ACM算法
算法·深度优先
code斗2 小时前
Java数据结构:堆详解
java·开发语言·数据结构
顺顺 尼4 小时前
linux 进程信号(上)
linux·c++·算法
罗西的思考4 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(5)--- GRPO
人工智能·算法·机器学习
richard_yuu4 小时前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
mmmmath_34 小时前
LeetCode.225.用队列实现栈
算法
Elaine3364 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
2601_965742224 小时前
布局GEO AI本地营销,我重点看这几个细节
大数据·人工智能·算法·ai·新媒体运营
EatFan4 小时前
AI Agent 上生产前先加三道闸门:审批、限权、可回放的工程实践
人工智能·python·算法·多智能体·ai agent·mcp·harness
思茂信息5 小时前
CST软件BCI仿真模型及仿真案例
开发语言·单片机·嵌入式硬件·算法·emc