码迷,mamicode.com
首页 > 编程语言 > 详细

求数组中最小的k个数

时间:2019-05-03 18:34:07      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:etl   return   tle   compare   for   least   最小   com   ber   

import java.util.*;
public class Solution {
   public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
       ArrayList<Integer> result = new ArrayList<Integer>();
       int length = input.length;
       if(k > length || k == 0){
           return result;
       }
       //定义大顶堆
        PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(k, (o1,o2)->o2.compareTo(o1));
       //该堆始终维护k个元素,出现比当前堆顶小的元素,那就干掉,重新调整堆
        for (int i = 0; i < length; i++) {
            if (maxHeap.size() != k) {
                maxHeap.offer(input[i]);
            } else if (maxHeap.peek() > input[i]) {
                maxHeap.poll();
                maxHeap.offer(input[i]);
            }
        }
        for (Integer integer : maxHeap) {
            result.add(integer);
        }
        return result;
    }
}

 

求数组中最小的k个数

标签:etl   return   tle   compare   for   least   最小   com   ber   

原文地址:https://www.cnblogs.com/theWinter/p/10805784.html

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