代码随想录 day13 滑动窗口最大值 前 K 个高频元素

发布时间 2024-01-09 21:29:17作者: 又见鸣蜩

滑动窗口最大值

这题第一次见 比较难找到思路

滑动窗口的移动比较类似于队列的行为 但是我们需要找到其中的最大值
在线性时间复杂度下 只能维护这个队列保持单调性
但是我们没有这样的一个可以在移动中保持单调的数据结构
只能自己手动创建
我们利用deque进行队列的创建
这个队列有三个基本函数
pop
用来弹出元素 但我们只拿它来弹出队列最前的元素与我们当前元素相等的情况
因为如果比当前队列最大值小的元素 它在不在队列与否 不影响我们拿到窗口最大值
push
这个函数在加入元素时,会不断跟队列尾的元素比较,大的就弹走,直到队列内都是比它大的元素或者它成为最大值
这样保持函数的单调性
getMaxValue
由于push保持了单调性,队首的元素就必定是最大值

剩下的主函数就是不断的while调用即可

前 K 个高频元素

本题利用一个小顶堆完成
如果用大顶堆不能简单的维护堆内保持前k个最大值
小顶堆就可以简单的将堆顶弹出直到剩余k个元素

lhs>rhs是小顶堆实现 比较反直觉

本题还涉及了很多容器 这些容器不是很熟悉