大家好,又见面了,我是你们的朋友全栈君。
滑动窗口最大值问题
利用递减队列实现
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;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158563.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...