【数据结构】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
                    
                

                
            
        
浙公网安备 33010602011771号