滑动窗口模板

应用场景:

满足XXX条件(计算结果,出现次数,同时包含)最长/最短子串/子数组

例如: 长度最小的子数组

滑动窗使用思路(寻找最长)

  • 左右双指针(L,R)在起始点,R向右逐位滑动循环每次滑动过程中:
    • 如果:窗内元素满足条件,R向右扩大窗口,并更新最优结果
    • 如果:窗内元素不满足条件,L向右缩小窗口
  • 直到 R 到达结尾退出循环

模板

//最长模板:
初始化left, right, result, bestResult
while (右指针没有到结尾) {
    窗口扩大, 加入right对应元素, 更新当前result
    while (result不满足要求) {
        窗口缩小, 移除left对应元素, left右移
    }
    更新最优结果bestResult
    right++;
}
返回bestResult;

滑动窗使用思路(寻找最短)

  • 左右双指针(L,R)在起始点,R向右逐位滑动循环,每次滑动过程中:
    • 如果:窗内元素满足条件,L向右缩小窗口,并更新最优结果
    • 如果:窗内元素不满足条件,R向右扩大窗口
  • 直到 R 到达结尾退出循环

模板

//最短模板:
初始化left, right, result, bestResult
while (右指针没有到结尾) {
    窗口扩大, 加入right对应元素, 更新当前result
    while (result满足要求) {
        更新最优结果bestResult
        窗口缩小, 移除left对应元素, left右移
    }
    right++;
}
返回bestResult;

你可能感兴趣的:(数据结构与算法,算法,数据结构)