思路
大根堆存放最小的k个数,建堆复杂度为n,调整堆复杂度lgn。
时间复杂度O(nlgk),空间复杂度O(k)。
代码
import java.util.ArrayList;
import java.util.PriorityQueue;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> list = new ArrayList<Integer>();
PriorityQueue<Integer> maxheap = new PriorityQueue<Integer>((x,y) -> y-x);
if(k > input.length || input == null || k == 0) return list;
for(int i = 0; i < k; i++) {
maxheap.offer(input[i]);
}
for(int i = k; i < input.length; i++) {
if(input[i] < maxheap.peek()) {
maxheap.remove();
maxheap.offer(input[i]);
}
}
for(Integer m : maxheap) {
list.add(m);
}
return list;
}
}