239. 滑动窗口最大值
1.题目描述
2.适用场景
- 时间复杂度: O(n)
- 空间复杂度: O(k)
3.做题思路
单调队列,画图更明白点
4.代码实现
class Myqueue{
Deque<Integer> deque = new LinkedList<>();
void poll(int val){
if(!deque.isEmpty() && val==deque.peek()){
deque.poll();
}
}
int peek() {
return deque.peek();
}
void add(int val){
while(!deque.isEmpty() && val > deque.peekLast()){
deque.pollLast();
}
deque.add(val);
}
}
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums.length == 1){
return nums;
}
int len = nums.length + 1 - k;
int [] res = new int [len];
int num = 0;
Myqueue myqueue = new Myqueue();
for (int i = 0; i < k; i++) {
myqueue.add(nums[i]);
}
res[num++] = myqueue.peek();
for (int i = k; i < nums.length; i++) {
myqueue.poll(nums[i - k]);
myqueue.add(nums[i]);
res[num++] = myqueue.peek();
}
return res;
}
}