网站设计的任务企业邮箱地址怎么注册
网站设计的任务,企业邮箱地址怎么注册,衡阳做网站,公司主页怎么填题目
239. 滑动窗口最大值 - 力扣#xff08;LeetCode#xff09; 思路
使用一个队列充当不断滑动的窗口#xff0c;每次滑动记录其中的最大值#xff1a; 如何在 O(1) 时间计算最大值#xff0c;只需要一个特殊的数据结构「单调队列」#xff0c;push 方法依然在队尾添…题目
239. 滑动窗口最大值 - 力扣LeetCode 思路
使用一个队列充当不断滑动的窗口每次滑动记录其中的最大值 如何在 O(1) 时间计算最大值只需要一个特殊的数据结构「单调队列」push 方法依然在队尾添加元素但是要把前面比自己小的元素都删掉直到遇到更大的元素才停止删除。 代码
class Solution {/* 单调队列的实现 */class MonotonicQueue {LinkedListInteger q new LinkedList();public void push(int n) {// 将小于 n 的元素全部删除while (!q.isEmpty() q.getLast() n) {q.pollLast();}// 然后将 n 加入尾部q.addLast(n);}public int max() {return q.getFirst();}public void pop(int n) {if (n q.getFirst()) {q.pollFirst();}}}/* 解题函数的实现 */public int[] maxSlidingWindow(int[] nums, int k) {MonotonicQueue window new MonotonicQueue();ListInteger res new ArrayList();for (int i 0; i nums.length; i) {if (i k - 1) {//先填满窗口的前 k - 1window.push(nums[i]);} else {// 窗口向前滑动加入新数字window.push(nums[i]);// 记录当前窗口的最大值res.add(window.max());// 移出旧数字window.pop(nums[i - k 1]);}}// 需要转成 int[] 数组再返回int[] arr new int[res.size()];for (int i 0; i res.size(); i) {arr[i] res.get(i);}return arr;}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89768.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!