輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。java
思路:spa
應該使用大頂堆來維護最小堆,而不能直接建立一個小頂堆並設置一個大小,企圖讓小頂堆中的元素都是最小元素。code
維護一個大小爲 K 的最小堆過程以下:在添加一個元素以後,若是大頂堆的大小大於 K,那麼須要將大頂堆的堆頂元素去除。it
import java.util.ArrayList; import java.util.PriorityQueue; import java.util.Comparator; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int[] nums, int k) { if (k > nums.length || k <= 0) return new ArrayList<>(); PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> o2 - o1); for (int num : nums) { maxHeap.add(num); if (maxHeap.size() > k) maxHeap.poll(); } return new ArrayList<>(maxHeap); } }