剑指 Offer 40. 最小的k个数

reverseOrder() 方法用于获取一个比较有否就实现Comparable接口的对象的集合的自然顺序相反。

剑指 Offer 40. 最小的k个数

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {

        if(k == 0 || arr.length ==0)    return new int[0];
        //小根堆变大根堆
        Queue<Integer> heap = new PriorityQueue<>(Collections.reverseOrder());
        for(int num : arr){
            //没达到k个数就入堆
            if(heap.size() < k)
                heap.offer(num);
            //如果遍历到的数比堆顶还小,就先poll堆顶,然后将该数放进堆里
            //如果比堆顶大就跳过了
            else if(num < heap.peek()){
                heap.poll();
                heap.offer(num);
            }
        }

        int[] res = new int[heap.size()];
        //用idx当下标,将堆中元素存入数组
        int idx = 0;
        for(int num : heap)
            res[idx++] = num;
        return res;
    }
}

 

posted @ 2021-04-02 16:30  星予  阅读(35)  评论(0编辑  收藏  举报