题解 | #最小的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;
    }
}

全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务