剑指 Offer 40. 最小的k个数

  1. class Solution {
  2. public int[] getLeastNumbers(int[] arr, int k) {
  3. if (k <= 0)
  4. return new int[0];
  5. int[] ans = new int[k];
  6. PriorityQueue<Integer> minHeap = new PriorityQueue<>((o1, o2)->(o2 - o1));
  7. for (int num : arr) {
  8. if (minHeap.size() < k) {
  9. minHeap.add(num);
  10. } else if (num < minHeap.peek()) {
  11. minHeap.remove();
  12. minHeap.add(num);
  13. }
  14. }
  15. for (int i = 0; i < k; i++) {
  16. ans[i] = minHeap.remove();
  17. }
  18. return ans;
  19. }
  20. }