NC119 最小的K个数
描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
0 <= k <= input.length <= 10000
0 <= input[i] <= 10000
输入:
[4,5,1,6,2,7,3,8],4
复制
返回值:
[1,2,3,4]
复制
说明:
返回最小的4个数即可,返回[1,3,2,4]也可以
import java.util.ArrayList;
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<>();
if(input == null || k == 0){
return res ;
}
PriorityQueue<Integer> maxheap = new PriorityQueue<Integer>(k ,new Comparator<Integer>(){
public int compare(Integer o1 , Integer o2){
return o2 - o1 ;
}
} );
for(int num : input){
maxheap.offer(num);
if(maxheap.size() > k){
maxheap.poll();
}
}
Iterator it = maxheap.iterator();
while(it.hasNext()){
res.add((Integer) it.next());
}
return res;
}
}
该博客介绍了如何利用优先队列(堆)在Java中高效地找出数组中最小的K个数。代码示例展示了如何创建一个最大堆,并在遍历数组时维护堆的大小不超过K,从而保证堆顶始终是最小的K个数中的最大值。最终,通过堆将最小的K个数输出。
587

被折叠的 条评论
为什么被折叠?



