滑动窗口

  1. 滑动窗口要求
    nums 中的数全部是正整数;右指针 r 右移 窗口和只会变大;左指针 l 右移 窗口和只会变小
    单调性成立;非常适合「先扩张、再收缩」的滑动窗口
    用右指针扩张窗口,直到和 ≥ target;然后用左指针收缩窗口,尽可能变短

  2. 209

  • while和if
    在滑动窗口里:while:窗口可以连续收缩;if:窗口最多收缩一次
    只要“收缩可能不止一次”,就必须用 while
    image
    image
    image

  • int result = INT32_MAX;我目前还没有找到任何合法答案
    result = 当前找到的最小长度;不断尝试用更小的长度更新它;result = min(result, 当前窗口长度);
    image
    image
    image

  • return result == INT32_MAX ? 0 : result;如果 result 还是 INT32_MAX,说明没找到合法子数组,返回 0;否则返回找到的最小长度 result

  • 条件 ? 条件为真时的值 : 条件为假时的值
    if (result == INT32_MAX) {
    return 0;
    } else {
    return result;}

  1. 643
  • 窗口长度是固定的(永远等于 k)
    这意味着什么?
    没有「合法 / 不合法」;没有「尽可能短 / 尽可能长」;没有 while;
    左指针每次跟着右指针一起走一步;这是最简单、最干净的滑动窗口

  • 思路:for循环初始化第一个窗口,令此时窗口a;再次for左进右出,窗口同时滑动,令此时窗口为b,选出ab中最大的,注意左右边界如何确定;最后返回时类型转换

  1. 713
posted @ 2026-01-11 15:01  大米香香  阅读(2)  评论(0)    收藏  举报