public class Solution2_大顶堆
{
//用PriorityQueue 来实现一个大顶堆. 当队内元素个数大于K个并且新入的元素小于 大顶堆的最大值,那么就出队列,新的进入.所有元素循环
//完之后,大顶堆内就是最小的K 个元素.
//这样虽然没有第一种方法时间复杂度低 O(NlogK) + O(K) ,但是不改变传入数组,适用于海量数据.
public ArrayList<Integer> GetLeastNumbers_Solution(int[] nums, int k)
{
if (k > nums.length || k <= 0)
{
return new ArrayList<>();
}
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> o2 - o1);
for (int num : nums)
{
maxHeap.add(num);
if (maxHeap.size() > k)
{
maxHeap.poll();
}
}
return new ArrayList<>(maxHeap);
}
}
《剑指offer》NO40 最小的K个数 大顶堆实现 详解 <Java实现>
最新推荐文章于 2021-11-25 15:28:41 发布