牛客题霸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;

    }
}
全部评论

相关推荐

笑死&nbsp;不是哥们离校了我真要睡街了&nbsp;加上还有几w的贷款&nbsp;不接受我准备去当三和大神
梦想是成为七海千秋:没事,hr这下就有底气了,下次遇到一个不接受的就说,你看,人家这学历都接受了,你凭什么不接受
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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