单调队列-上
题目1(单调队列经典用法模板)
题目链接:239. 滑动窗口最大值
做法
- 维护一个单调递减的双端队列,队列存处的是数组的索引
- 队首元素始终是当前窗口最大值的索引
- 队列中索引对应的值依次递减
- 先按上述要求构造长度为
k-1的队列,对于窗口[l,r],- 首先添加右边界元素
r(维护单调性) - 记录答案,即队首元素对应数组中的值
- 移除左边界元素(队首索引等于窗口左边界
l则移除)
- 首先添加右边界元素
代码
1 | class Solution { |
题目2
做法
- 对于一个不满足要求的子数组而言,向右拓宽子数组只会更不满足(最大值更大或不变,最小值更小或不变)
- 维护两个单调队列用于记录某一窗口的最大值和最小值,思路同上题
- 遍历原数组,用
l,r维护滑动窗口,r永远是滑动窗口没有添加的下一个数的位置,添加到直至不满足要求为止,此时记录答案,弹出队首,继续添加到不满足要求为止
代码
1 | class Solution { |
题目3
做法同上
1 | package com.study.class54; |
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Heaven
