题目列表
239. 滑动窗口最大值
具体实现
239. 滑动窗口最大值
- 只要一个队列中,右边的大于等于左边的数,那么左边的数就没有意义,就可以把左边的数删除掉
- 双端队列-单调队列
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {//一共有多少结果int n = nums.length;int[] res = new int[n - k + 1];Deque<Integer> q = new ArrayDeque<>();//双端队列-单调队列for(int i = 0, t = 0; i < n; i++){//右端点为i,则左端点为i - k + 1//如果左端点比队列中首元素还要大的话,证明首元素已经滑出窗口了if(!q.isEmpty() && i - k + 1 > q.peekFirst()) q.removeFirst();//把小于nums[i]的优化掉while(!q.isEmpty() && nums[i] > nums[q.peekLast()]) q.removeLast();q.addLast(i);//i从k-1的位置开始才输出队列最大值if(i >= k - 1) res[t++] = nums[q.peekFirst()];}return res;}}
