⮇🢧△🡗🢨🢧🢫◢ (@Karlbaey) 在 程序设计#4%2 - 【经典算法】双指针和滑动窗口·第三部分 中发帖
上期指路➡
在上一期的【双指针和滑动窗口·第二部分】,我们着重接触了滑动窗口的两种最基本情况:定长窗口(常用于寻找子数组求和的最大值,子串内最多元音数等问题)以及不定长窗口(例如上一期 leco 76 为代表的“越短越好”窗口和 leco 1658 为代表的“越长越好”窗口)。
但是更多时候我们不能单纯地使用这一类窗口。比如,如果我们需要求得每次窗口移动时,窗口内的最大值,这时候以过去的技巧来说会很麻烦,最直观的想法就是对每个窗口进行排序。但是那样的时间复杂度会退化到 O(nk),数组长度大起来这就不可接受了。所以我们得给上一期探照灯,也就是朴素的滑动窗口,加一些 plugin。
求窗口内的最大/小值 - 单调队列
对于求最值,最朴素的观点当然就是通过遍历每一个窗口,接着寻找最值。简单遍历的时间复杂度是 O(k),加上滑动窗口本身的复杂度 O(n),总的时间复杂度就会退化到 O(...