代码随想录算法训练营第十三天 |239. 滑动窗口最大值、347. 前 K 个高频元素
239. 滑动窗口最大值
题目链接:239. 滑动窗口最大值
- 单调队列 leetcode.cn/problems/du…
- 在pop的时候需要知道pop的是否是deque中的最大值,不是的话不pop
class MyQueue {
Deque<Integer> deque = new LinkedList<>();
void poll(int val){
if(!deque.isEmpty() && val == deque.peek()){
deque.poll();
}
}
void add(int val){
while(!deque.isEmpty() && val > deque.getLast()){
deque.removeLast();
}
deque.add(val);
}
int peek(){
return deque.peek();
}
}
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
int []maxArr = new int[nums.length - k + 1];
MyQueue myque = new MyQueue();
for(int i = 0; i < k; i++){
myque.add(nums[i]);
}
maxArr[0] = myque.peek();
for(int i = k; i < nums.length; i++){
myque.add(nums[i]);
myque.poll(nums[i - k]);
maxArr[i - k + 1] = myque.peek();
}
return maxArr;
}
}
347. 前 K 个高频元素
题目链接:347. 前 K 个高频元素
- 首先用unordered_map映射出每个元素的频率
- Priority_queue建立小顶堆或者大顶堆的选择,需要用到comparison类