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;
    }
}

猜你喜欢

转载自blog.csdn.net/susuxuezhang/article/details/89282543