239. 滑动窗口最大值
题目链接:239. 滑动窗口最大值
- 单调队列
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 个高频元素
Map 和 优先队列 API的使用
大顶堆小顶堆的选择