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

猜你喜欢

转载自blog.csdn.net/edisonzhi/article/details/115796762