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; 
    }
}
全部评论

相关推荐

驼瑞驰_招募评论官版...:反正我信了,上牛客,拿offer
腾讯开奖372人在聊
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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