这道题最简单的就是排序,时间复杂度O(nlogn)。
不再讲述。
这里可以使用优先队列,时间复杂度O(nlogk)。
注意检验k的合法性,不然初始化队列时会报错。
import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Queue;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> arrayList = new ArrayList<>();
if(null == input || 0 == input.length || k<=0 || k > input.length){
return arrayList;
}
Queue<Integer> queue = new PriorityQueue<>(k, Collections.reverseOrder());
for(int i =0;i < input.length;i++){
if(queue.size() < k){
queue.add(input[i]);
}else{
if(input[i] < queue.peek()){
queue.remove();
queue.add(input[i]);
}
}
}
while(!queue.isEmpty()){
arrayList.add(queue.remove());
}
return arrayList;
}
public static void main(String[] args){
int[] array = {1,2,3,2,2,2,5,4,2};
Solution solution = new Solution();
System.out.println(solution.GetLeastNumbers_Solution(array,3));
}
}