大家好,又见面了,我是你们的朋友全栈君。
滑动窗口最大值问题 利用递减队列实现 Dequeue dequeue = new LinkedList<>(); 递减队列方法说明 peekFirst获取队头元素 pollFirsr队头元素出队 offerLast == add在队尾插入新元素
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums.length==0){
return new int[0];
}
Deque<Integer> deque = new LinkedList<>();
for (int i = 0; i <k ; i++) {
while(!deque.isEmpty() && nums[i]>=nums[deque.peekLast()]){
deque.pollLast();
}
deque.offerLast(i);
}
int len = nums.length;
int[] res = new int[len-k+1];
res[0] = nums[deque.peekFirst()];
for (int i = k; i <len ; i++) {
while(!deque.isEmpty() && nums[i]>=nums[deque.peekLast()]){
deque.pollLast();
}
deque.offerLast(i);
while (i-deque.peekFirst()>=k){
deque.pollFirst();
}
res[i-k+1] = nums[deque.peekFirst()];
}
return res;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158563.html原文链接:https://javaforall.cn