美文网首页算法
239. 滑动窗口最大值

239. 滑动窗口最大值

作者: crazyfox | 来源:发表于2021-09-16 10:37 被阅读0次

239. 滑动窗口最大值

思路:
1.暴力法,双层便利

java代码:

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int[] results = new int[nums.length-k+1];

        for(int ri=k-1;ri<nums.length;ri++){
            int m = nums[ri];
            for(int li=ri-k+1;li<ri;li++){
                m = Math.max(m,nums[li]);
            }
            results[ri-k+1]=m;
        }
        return results;
    }
}

2.双端队列
维护一个双端队列deque 和一个数组result
从i开始遍历nums
把nums[i]的下标添加进队列尾部(添加时,按照nums[i]从大到小添加,如果加入的前面有比nums[i]小的,出队列)
例子:[8,3,4],5 ->[8,5]

w = i-k+1;
当w>=0时,开始判断deque的头部index是否<w,小于出队列,然后把deque的头部nums[i]添加进result

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int[] results = new int[nums.length-k+1];
        LinkedList<Integer> linkl = new LinkedList<Integer>();
    
        for(int i = 0;i<nums.length;i++){
            while(!linkl.isEmpty() && nums[linkl.peekLast()]<=nums[i]){
                //
                linkl.pollLast();
            }
            linkl.addLast(i);
            if(linkl.peek()<i-k+1){
                linkl.poll();
            }
            if(i>=k-1){
                results[i-k+1]=nums[linkl.peek()];
            }
        }

        return results;
    }
}      

3.动态规划

4.妖法

相关文章

网友评论

    本文标题:239. 滑动窗口最大值

    本文链接:https://www.haomeiwen.com/subject/qekrgltx.html