Fork me on GitHub

【数据结构】Get K small Num 最小的k个数

Get K small Num 最小的k个数

输入int[],找出最小的k个数。

输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]

思路

可以通过大顶堆,来保持k个数,来得到最小的k个数

 public int[] getLeastNumbers(int[] arr, int k) {
        int[] ans = new int[k];
        if(k==0){
            return new int[]{};
        }
        if(arr.length<=0){
            return new int[]{};
        }
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>((o1, o2)->o2-o1);
        for (int i = 0; i < arr.length; i++) {
            if (pq.size()<k){
                pq.offer(arr[i]);
                continue;
            }
            if (arr[i]< pq.peek()) {
                pq.poll();
                pq.offer(arr[i]);
            }
        }
        for (int i = 0; i < ans.length; i++) {
            ans[i]=pq.poll();
        }
        return ans;
    }

Tag

heap

posted @ 2021-07-07 18:42  WilliamCui  阅读(60)  评论(0编辑  收藏  举报