牛客题霸NC119题解

最小的K个数

https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=117&&tqId=35260&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

最小的K个数

牛客题霸NC119

难度:Medium

题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

输入

[4,5,1,6,2,7,3,8],4

返回值

[1,2,3,4]

解决思路

使用一个容量为K的最大堆,程序如下:

import java.util.*;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {

       if(k <= 0 || k > input.length){
           return new ArrayList<>();
       }

        // 大顶堆
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(
            new Comparator<Integer>(){
                @Override
                public int compare(Integer o1, Integer o2){
                    return o2 - o1;
                }
            }
        );

        for(int m : input){
            if(priorityQueue.size() < k || priorityQueue.peek() > m){
                priorityQueue.offer(m);
            }

            if(priorityQueue.size() > k){
                priorityQueue.poll();
            }
        }

        ArrayList<Integer> list = new ArrayList<>();

        while(!priorityQueue.isEmpty()){
            list.add(priorityQueue.poll());
        }

        return list;

    }
}
全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务