寻找最小的k个数
来源:互联网 发布:六级词汇书推荐知乎 编辑:程序博客网 时间:2024/06/10 03:02
寻找最小的k个数
1. 题目描述
在一个长度为n的数组中,寻找最小的k个数。(最大的k个数解法类似)
2. 排序法
想法比较简单,先对n个数排序,再输入前面k个数,即可。
这种方法的时间复杂度比较大。假设我们使用快排,需要O(nlogn), 然后输出k个数需要O(k),一共要O(nlogn)~
代码略。
3. 块移动法
这种方法比较好,算法简单,易于实现。
先把数组中的前k个数作为候选最小块;再让这个块往后移,每移动一次就比较当前数和块中的最大数,如果比最大数小,替换掉,重新选择一个块中的最大数。
如下图所示:
这种方法的时间复杂度为O(k)+O(n-k)k=O(nk).
还有一种改进的方法,就是把k个数放在一个最大堆heap中,然后每次移动更新的时候,就是一个更新堆的过程,如果当前数比堆顶元素(k个数中的最大数)小,那么我们就更新这个堆。而更新堆只需要O(logk)。所以这种改进方法的时间复杂度为O(nlogk)。
4. 快速选择方法
这种方法的比较难懂,不过时间复杂度为O(n).
参考链接:
https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.01.md
1 0
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的K个数
- 寻找最小的k个数
- 寻找最小的K个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的 k 个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的K个数
- 整理了一些在实际Java开发中可能会用到的工具和资料
- Iterator模式
- 正则表达式验证格式 手机、邮箱、字符串
- Quartus rom 初始化文件hex modelsim仿真问题
- Retinex系列之McCann99 Retinex
- 寻找最小的k个数
- I2S音频总线学习(二)I2S总线协议
- oracle date数据的条件查询
- HDOJ 5120 Intersection(求两圆相交面积)
- JPA实体标识的自动生成
- jQuery中$.ajax解析xml、json格式数据
- Java反射工具类
- 解析
- jsp+java用pageoffice在线编辑office文档