本文主要是介绍LeetCode 239 Sliding Window Maximum,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
解答:
一开始申请了一堆最大值,最大值索引,次大值,次大值索引,次次大值,次次大值索引和当前值比较,来记录遍历时的情况,发现一些特殊情况很难表达,注入k=1,2什么的,而且有漏洞。
后来搜索了一下答案,是用队列来记录,想法还是差不多的,不过比我那种要好表达的多。
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length==0){return new int[0];}int[] res=new int[nums.length-k+1];LinkedList<Integer> deque = new LinkedList<Integer>();for(int i=0;i<nums.length;i++){//滑动窗口时移除不在窗口中的最大值while(!deque.isEmpty()&&deque.peekFirst()==i-k){// [i-k+1,i]窗口共K个数字deque.pollFirst();}//队列中储存索引i,保持队列中的nums[i]是绝对降序的while(!deque.isEmpty()&&nums[deque.peekLast()]<nums[i]){deque.pollLast();}deque.offer(i);if(i-k+1>=0){res[i-k+1]=nums[deque.peekFirst()];}}return res;}
}
这篇关于LeetCode 239 Sliding Window Maximum的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!