题解 | #最小的K个数#

最小的K个数

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

import java.util.*;


public class Solution {
   //sort排序
    // public ArrayList<Integer> GetLeastNumbers_Solution (int[] input, int k) {
    //     ArrayList<Integer> ret = new ArrayList<>();
    //     if(k==0||k>input.length){
    //         return ret;
    //     }
    //     Arrays.sort(input);
    //     for(int i=0;i<k;i++){
    //         ret.add(input[i]);
    //     }
    //     return ret;
    // }

    //堆排序
    //利用input数组前k个元素创建大顶堆。其余元素与对顶比较,如果小于就加入堆,并且将堆顶弹出(优先级队列会自主排序,将大的都放在前面比较)
    // 最后保证的就是k个最小的
     public ArrayList<Integer> GetLeastNumbers_Solution (int[] input, int k) {
        ArrayList<Integer> ret = new ArrayList<>();
        if(k==0||input.length==0){
            return ret;
        }
        //默认见小根堆
        PriorityQueue<Integer> q = new PriorityQueue<>(Collections.reverseOrder());
        //建大根堆
        for(int i=0;i<k;i++){
            q.offer(input[i]);
        }
        //遍历剩下的元素比较
        for(int i=k;i<input.length;i++){
            if(q.peek()>input[i]){
                q.poll();
                q.offer(input[i]);
            }
        }
       //返回结果
       for(int i=0;i<k;i++){
           ret.add(q.poll());
       }
        return ret;
    }
}

全部评论

相关推荐

沉淀去了,8月是不是机会会多一点,。打招呼300+,就一个小厂面试,聊了十分钟天就让我去了,暑假继续沉淀了,到八月九月冲了
丰川打工祥:我目前的体感是,双非本+一段小厂实习,基本约不到中厂的面。已经开始第二段小厂了。可能的确是最近hc太少了。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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