滑动窗口最大值

Posted Alice_yufeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了滑动窗口最大值相关的知识,希望对你有一定的参考价值。

class Solution 
    public int[] maxSlidingWindow(int[] nums, int k) 
        int n = nums.length;
        // 1. 优先队列存放的是二元组(num,index) : 大顶堆(元素大小不同按元素大小排列,元素大小相同按下标进行排列)
            // num :   是为了比较元素大小
            // index : 是为了判断窗口的大小是否超出范围
        PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>()
            public int compare(int[] pair1,int[] pair2)
                return pair1[0] != pair2[0] ? pair2[0] - pair1[0]:pair2[1] - pair1[1];
            
        );

        // 2. 优选队列初始化 : k个元素的堆
        for(int i = 0;i < k;i++)
            pq.offer(new int[]nums[i],i);
        

        // 3. 处理堆逻辑
        int[] res = new int[n - k + 1];         // 初始化结果数组长度 :一共有 n - k + 1个窗口
        res[0] = pq.peek()[0];                  // 初始化res[0] : 拿出目前堆顶的元素
        for(int i = k;i < n;i++)               // 向右移动滑动窗口
            pq.offer(new int[]nums[i],i);     // 加入大顶堆中
            while(pq.peek()[1] <= i - k)       // 将下标不在滑动窗口中的元素都干掉
                pq.poll();                      // 维护:堆的大小就是滑动窗口的大小
               
            res[i - k + 1] = pq.peek()[0];      // 此时堆顶元素就是滑动窗口的最大值
        
        return res;
    

以上是关于滑动窗口最大值的主要内容,如果未能解决你的问题,请参考以下文章

JZ-064-滑动窗口的最大值

滑动窗口的最大值

剑指offer---滑动窗口的最大值

Leetcode 239.滑动窗口最大值

剑指offer--滑动窗口最大值

滑动窗口最大值