题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

题目解析

大小为 K 的最小堆

复杂度:O(NlogK) + O(K),特别适合处理海量数据。

应该使用大顶堆来维护最小堆,而不能直接创建一个小顶堆并设置一个大小,企图让小顶堆中的元素都是最小元素。

维护一个大小为 K 的最小堆过程如下:在添加一个元素之后,如果大顶堆的大小大于 K,那么需要将大顶堆的堆顶元素去除。

题目解答

import java.util.*;
public class A03 { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
if (k > input.length || k <= 0)
return new ArrayList<>();
//lambda表达式,Comparator比较器,相当于一个可以自动排序的队列。
//PriorityQueue默认是一个小顶堆,然而可以通过传入自定义的Comparator函数来实现大顶堆。
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> o2 - o1);
for (int num : input) {
maxHeap.add(num);
if (maxHeap.size() > k)
maxHeap.poll();
}
return new ArrayList<>(maxHeap);
}
}

最新文章

  1. java基础 绘图技术.坦克大战 之java绘图坐标体系(二)
  2. Sublime Text 2 增加python版本
  3. HTTP 状态代码表示什么意思?
  4. sublime text 3 安装
  5. T4 模板的调试方法,方便大家遇到问题自己快速定位和优化
  6. javascript 递归调用
  7. iOS开发-自动布局和自动旋转
  8. js冒泡事件小解
  9. Project下载提示检索 COM 类工厂中 CLSID 为 {36D27C48-A1E8-11D3-BA55-00C04F72F325} 的组件失败
  10. Java基础 -- 持有对象(容器)
  11. 2018-2019-2 网络对抗技术 20165231 Exp3 免杀原理与实践
  12. 多线程——multiprocess
  13. 第九届蓝桥杯C/C++B组省赛感想
  14. java 基础响应体定义 - 通用
  15. 关于交叉熵(cross entropy),你了解哪些
  16. ubuntu中文版man
  17. [EXP]Microsoft Windows MSHTML Engine - &quot;Edit&quot; Remote Code Execution
  18. 微信小程序页面带参数跳转及接收参数内容navigator
  19. 【IT笔试面试题整理】位操作
  20. angular使用遇到的问题

热门文章

  1. EasyARM-iMX257 linxu两年前的笔记
  2. AbstractCollection类中的 T[] toArray(T[] a)方法源码解读
  3. Crypto++ AES 加密解密流程
  4. EIGRP-11-弥散更新算法-EIGRP中的本地计算和弥散计算
  5. MySQL 性能优化之慢查询
  6. 11.实战交付一套dubbo微服务到k8s集群(3)之dubbo微服务底包镜像制作
  7. 使用addEventListener绑定事件是关于this和event记录
  8. MOJITO 发布一周,爬一波弹幕分析下
  9. MDX
  10. opencv c++访问某一区域