中山网站建设文化如何,网页游戏服务端,南京建设银行网站首页,app软件开发公司怎么选239. 滑动窗口最大值 原题链接#xff1a;完成情况#xff1a;解题思路#xff1a;参考代码#xff1a;错误经验吸取 原题链接#xff1a;
239. 滑动窗口最大值 https://leetcode.cn/problems/sliding-window-maximum/description/
完成情况#xff1a; 解题思路… 239. 滑动窗口最大值 原题链接完成情况解题思路参考代码错误经验吸取 原题链接
239. 滑动窗口最大值 https://leetcode.cn/problems/sliding-window-maximum/description/
完成情况 解题思路
随时随地维护一个大小为k的堆参考代码
class Solution {public int[] maxSlidingWindow(int[] nums, int k) { //随时随地维护一个大小为k的堆if (nums null || nums.length 0 || k 0) {return new int[0];}//存放结果元素的数组int [] res new int[nums.length - k 1];int num 0;//自定义队列MyQueue myQueue new MyQueue();//先将前K的元素放入队列for (int i 0; i k;i){myQueue.add(nums[i]);}res[num] myQueue.peek();for (int i k; i nums.length; i) {//滑动窗口移除最前面的元素移除是判断该元素是否放入队列myQueue.poll(nums[i - k]);//滑动窗口加入最后面的元素myQueue.add(nums[i]);//记录对应的最大值res[num] myQueue.peek();}return res;}
}class MyQueue {DequeInteger deque new LinkedList();//弹出元素时比较当前要弹出的数值是否等于队列出口的数值如果相等则弹出//同时判断队列当前是否为空void poll(int val) {if (!deque.isEmpty() deque.peek() val) {deque.poll();}}//添加元素时如果要添加的元素大于入口处的元素就将入口元素弹出//保证队列元素单调递减//比如此时队列元素3,12将要入队比1大所以1弹出此时队列3,2void add(int val) {while (!deque.isEmpty() deque.getLast() val) {deque.removeLast();}deque.add(val);}//队列队顶元素始终为最大值int peek() {return deque.peek();}
}错误经验吸取