滑动窗口最大值问题
利用递减队列实现
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;
}
今天的文章滑动窗口求最大值的意义_leetcode难度级别「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/75598.html