码迷,mamicode.com
首页 > 其他好文 > 详细

21.1.2 leetcode239滑动窗口

时间:2021-01-05 11:29:00      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:队列   滑动   imu   pre   com   个数   题意   href   maximum   

题目链接:https://leetcode-cn.com/problems/sliding-window-maximum/

题意:在一个数组上有一个长度为k的滑动窗口,每次向右移一位,求滑动窗口的最大值。

分析:首先要明确一个概念,每次滑动窗口加入一个值后,当前窗口内所有比它小的值都不可能当最大值了。所以我们可以用一个单调队列来做,当每读取一个新值,如果此时队尾都比他大(因为单增所以前面所有值都比他大),就直接放弃,不可能成为最大值,否则就把当前队列中每一个比它小的值全部丢掉,之后加入这个新值。

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int head=0,tail=-1;
        int len = nums.length;
        int[] q = new int[len];
        int[] p = new int[len];
        int[] ans = new int[len-k+1];
        for(int i=0;i<len;i++){
            q[i]=0;
            p[i]=0;
        }
        for(int i=0;i<len;i++){
            while(head<=tail&&q[tail]<=nums[i])tail--;
            q[++tail]=nums[i];p[tail]=i;
            while(p[head]<=i-k)head++;
            if(i>=k-1) ans[i-k+1]=q[head];
        }
        return ans;
    }
}

 

21.1.2 leetcode239滑动窗口

标签:队列   滑动   imu   pre   com   个数   题意   href   maximum   

原文地址:https://www.cnblogs.com/qingjiuling/p/14221634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!