Java for You 数据结构 剑指Offer之三十-最小的K个数

剑指Offer之三十-最小的K个数

题目描述

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

解法1

  • 对数组排序,取前边k个数存到list集合中
  • 该解法时间复杂度依赖于排序

代码实现

解法2

  • 基于partition函数
  • 只有当我们可以修改输入的数组时可用

代码实现

解法3

  • 适合海量数据的处理
  • 创建一个用于保存最小k个数的容器
  • 第一步是放入k个元素,
  • 第二步是比较容器中最大的数与当前数组遍历的那个数的大小
  • 如果容器中最大的数比当前遍历的数大,就移除该数,并放入当前遍历的那个数
  • 最大堆或红黑树都能实现这样的容器

代码实现

本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/algorithms/3355.html

作者: 蜗牛

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部