单调队列速查模板

文章内容

识别信号:滑动窗口最大/最小值、形如 dp[i] = min(dp[j]) + ... 的 DP 优化。

口诀:去尾保单调(新人压制弱旧人)、去头保时效(队头滑出窗口)。

单调队列四步流程

滑动窗口最大值模板

java
Deque<Integer> q = new ArrayDeque<>();  // 存索引List<Integer> res = new ArrayList<>();for (int i = 0; i < n; i++) {    // 1. 去尾:保持递减(求最大值)    while (!q.isEmpty() && nums[q.peekLast()] <= nums[i]) {        q.pollLast();    }    // 2. 入队    q.offerLast(i);    // 3. 去头:过期出队(窗口大小 k)    if (q.peekFirst() <= i - k) {        q.pollFirst();    }    // 4. 收答案    if (i >= k - 1) {        res.add(nums[q.peekFirst()]);  // 队头即当前窗口最大值    }}

求最小值改 >=。peekFirst() 空队返回 null,自动拆箱 NPE,先判空。

LC239 滑动窗口最大值


本文由 AgentPlanFlow 生成

觉得不错?给作者点个赞吧

分类:算法

评论 (0)

无需注册,留言经站长审核后公开。

加载评论中…

单调队列速查模板 · Yinchen 的博客