题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

代码

思想使用Java中的PriorityQueue优先队列来解

  1. public class Solution {
  2. public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
  3. ArrayList<Integer> result = new ArrayList<Integer>();
  4. int length = input.length;
  5. if(k > length || k == 0){
  6. return result;
  7. }
  8. PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(k, new Comparator<Integer>() {
  9. @Override
  10. public int compare(Integer o1, Integer o2) {
  11. return o2.compareTo(o1);
  12. }
  13. });
  14. for (int i = 0; i < length; i++) {
  15. if (maxHeap.size() != k) {
  16. maxHeap.offer(input[i]);
  17. } else if (maxHeap.peek() > input[i]) {
  18. maxHeap.poll();
  19. maxHeap.offer(input[i]);
  20. }
  21. }
  22. for (Integer integer : maxHeap) {
  23. result.add(integer);
  24. }
  25. return result;
  26. }
  27. }