算法之滑动窗口

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

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

相关推荐
纽扣6673 小时前
【算法进阶之路】链表核心:快慢指针与反转链表专题精讲
数据结构·c++·算法·链表
浅念-3 小时前
吃透栈:LeetCode 栈算法题全解析
数据结构·c++·算法·leetcode·职场和发展·
吟安安安安3 小时前
【算法设计与分析】第一讲 算法基础(上)
算法
阿Y加油吧3 小时前
二刷 LeetCode:62. 不同路径 & 64. 最小路径和 复盘笔记
笔记·算法·leetcode
生成论实验室3 小时前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》导论:在破碎的世界寻找统一语法
人工智能·科技·算法·架构·创业创新
承渊政道3 小时前
【动态规划算法】(两个数组的DP问题深度剖析与求解方法)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
杨连江3 小时前
原子级平面限域协同晶核诱导定向生长单层鳞片石墨的研究
算法
MATLAB代码顾问3 小时前
混合粒子群-模拟退火算法(HPSO-SA)求解作业车间调度问题——附MATLAB代码
算法·matlab·模拟退火算法
Felven3 小时前
C. Prefix Min and Suffix Max
算法