牛客题霸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-09 09:19
已编辑
沈阳农业大学 C++
修订
丿南烟丶:个人评价可以删掉 两个项目都是轮子项目,把一个转换成应用型项目,把MySQL和redis用起来 另外项目的时间可以标明一下
最后再改一次简历
点赞 评论 收藏
分享
08-15 01:16
Python
Java小萌新新萌小...:照片不用整这么大的 而且你的照片截歪了 你想找专业对口的 那普通话证写在这里其实没有什么必要 就是看着内容多点 而且里面字体大小也不一样 修改一下排版 有很多空间可以再利用一下 字大一点 不然现在这样观感不太好 再就是项目好好优化一下 加油
点赞 评论 收藏
分享
酷酷的喜马拉雅山:感觉这比一直在初筛不动的好多了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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