题解 | #最小的K个数#

最小的K个数

https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

import java.util.*;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> list = new ArrayList<>();
        if(input.length < k || k < 1 || input.length <0) return list;


        //创建一个大根堆 堆顶为堆中的最大元素 ,
        //每次取出堆顶元素 就相当于取出堆中的最大元素
        //注意 堆中元素是无序存储的 
        Queue<Integer> queue = new PriorityQueue<>(k,Collections.reverseOrder()); 

        for(int i = 0 ; i < input.length ; i++){
                if(queue.size() < k){
                    queue.add(input[i]);
                }else{
                    if(input[i] < queue.peek()){
                        //如果 当前元素小于 堆中最大元素 
                        //将堆中最大元素弹出 将当前元素加入堆中
                        queue.poll();
                        queue.add(input[i]);
                    }
                }
        }
        while(!queue.isEmpty()){
            list.add(queue.poll());
        }



        return list;
    }
}

全部评论

相关推荐

小肥罗:此乃引蛇出洞之计,勾出你想去杭州的原因再告诉你不在杭州,让你打脸,自己离开。好一招抛砖引玉,虾仁猪心。你回复:计划去杭州,但我心中第一选择是宁波~巧了! 这计名叫“阿Q精神胜利法之厚脸皮不要脸我不尴尬谁爱尴尬谁尴尬去”之计!克制一切!
这个工作能去吗
点赞 评论 收藏
分享
10-21 00:37
已编辑
山东大学 C++
小浪_Coding:你问别人,本来就是有求于人,别人肯定没有义务免费回答你丫, 有点流量每天私信可能都十几,几十条的,大家都有工作和自己的事情, 付费也是正常的, 就像你请别人搭把手, 总得给人家买瓶水喝吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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