java 优先队列

最小的K个数

http://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf

import java.util.*;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res  = new ArrayList<>();
        int len = input.length;
        if(len <  k || k == 0){
            return res;
        }
        // java优先队列默认是小顶堆,我们要设置为大顶堆
        // 这里用的lambda表达式实现比较器接口
        Queue<Integer> pq = new PriorityQueue<>(k,(a, b)->(b-a));
        for(int i = 0; i < len; i++){
            // 队列没满时,需要加满
            if(pq.size() < k){
                pq.add(input[i]);
            }else{
                // 队列满了即i>=k时,需要开始判断,当前值小于堆顶时需要加入队列
                if(input[i] < pq.peek()){
                    pq.poll();
                    pq.add(input[i]);
                }
            }
        }
        res.addAll(pq);
        return res; 
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
08-14 22:16
我爱加瓦233:今年行情真的好起来了,暑期实习拿了美团,京东,饿了么三家的Offer,最终去了美团,披上了我的黄马褂,开启送外卖之旅
点赞 评论 收藏
分享
09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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