题解 | #滑动窗口的最大值#

滑动窗口的最大值

http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

方法一暴力解决,方法二使用java的优先队列,维护一个大顶堆,同时判断堆顶的元素是不是在当前窗口内,若不在则移除堆顶直到堆顶位于当前窗口内,此时堆顶元素就是本窗口内的最大值。
import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        ArrayList<Integer> res=new ArrayList<>();
        int n=num.length;
        if(size>n||size==0){
            return res;
        }
//         int i=0;
//         int j=i+size-1;
//         while(i<n&&j<n){
//             int temMax=Integer.MIN_VALUE;
//             for(int k=i;k<=j;k++){
//                 if(num[k]>=temMax){
//                     temMax=num[k];
//                 }
//             }
//             res.add(temMax);
//             i=i+1;
//             j=i+size-1;
//         }
//         return res;
        PriorityQueue<int[]> pg=new PriorityQueue<>(new Comparator<int[]>(){
            public int compare(int[] a,int[] b){
                return b[0]!=a[0]?b[0]-a[0]:b[1]-a[1];}
        });
        for(int i=0;i<size;i++){
            pg.add(new int[]{num[i],i});
        }
        res.add(pg.peek()[0]);
        for(int i=size;i<n;i++){
            pg.add(new int[]{num[i],i});
            while(pg.peek()[1]<=i-size){
                pg.poll();
            }
            res.add(pg.peek()[0]);
        }
        return res;
    }
}
全部评论

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务