题目
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。
思路
也就是一个优先队列,来存放所有的数,然后,依次弹出前面的k个数即可。
代码
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
//定义一个升序排序
class mycmp implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
}
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k)
{
ArrayList<Integer> ans = new ArrayList();
if (k>input.length)
return ans;
Queue<Integer>queue=new PriorityQueue<>(new mycmp());
int length=input.length;
for (int i=0;i<length;++i)
{
queue.add(input[i]);
}
int index=0;
while (index++<k)
{
ans.add(queue.poll());
}
return ans;
}
}
结果
第一次使用优先队列,其实感觉就跟结构体排序差不多。这道题,最好的是建立一个最小堆,这样子更快捷。