最小的K个数

113 阅读1分钟

1.分析

  • 方法1:先排序,再循环取K个数
  • 方法2:用最小堆来存数据,取K个堆顶的元素,因为最小堆的堆顶元素永远是最小

2.代码

  • 方法1
import java.util.*;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res = new ArrayList<>();
        if (k == 0)return res;
        Arrays.sort(input);//原地排序
        for (int i = 0; i < k; i++) {
            res.add(input[i]);
        }
        return res;
    }
}
  • 方法2
import java.util.*;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if(input==null||input.length<k||k<0){
            return result;
        }//边界值判断
        PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();//创建最小堆
        for(int i=0;i<input.length;i++){
            minHeap.add(input[i]);
        }
        for(int i = 0;i<k;i++){
            result.add(minHeap.poll());//堆顶元素永远是最小的值
        }
        return result;
    }
}