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

滑动窗口的最大值

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

import java.util.*;


public class Solution {
   //这里重写一个比较器 实现降序排列
    public  class CustomComparator implements Comparator<Integer> {

        @Override
        public int compare(Integer number1, Integer number2) {
            int value =  number1.compareTo(number2);
            //元素以相反的顺序排序
            if (value > 0) {
                return -1;
            } else if (value < 0) {
                return 1;
            } else {
                return 0;
            }
        }
    }
    public ArrayList<Integer> maxInWindows (int[] num, int size) {
        // 如果输入的size为0的时候 就需要返回一个空ArrayList
        if(size==0){
            ArrayList<Integer> arr0=new ArrayList<>();
            return arr0;
        }
	  //定义一个新的数组arr 这里存的是每次窗口滑动时的最大值 
	  //利用数学 求出arr需要length-size+1个空间
        Integer[] arr = new Integer[num.length - size + 1];
        for (int i = 0; i < num.length - size + 1; i++) {
		  //创建大根堆
            PriorityQueue<Integer> p1 = new PriorityQueue<>(new CustomComparator());
            for (int j = 0; j < size; j++) {
			  //把从i~i+size的值加入到大根堆中
                p1.add(num[i + j]);
            }
		  //只取出顶点就是大根堆中最大的值(即所滑动的窗口的最大值)
            arr[i] = p1.peek();
        }
        ArrayList<Integer> newArr = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
		  //把arr数组转化到ArrayList的数组中
            newArr.add(arr[i]);
        }
        return newArr;
    }
}

全部评论

相关推荐

投递亚信科技(中国)有限公司等公司6个岗位
点赞 评论 收藏
分享
kabuu:问多了怕遇到聪明人坑不了了,说不定里面很坑呢,还是相信自己的选择吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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