从一个长度为n的数组中找出前k个最小值的最优实现
2016-09-24 00:16
232 查看
有一道很经典的面试题:如何从一个长度为n的数组中找出前k个最小值/最大值?
对于这道题,其实我之前也没有找到一种最优的、面试官最想听到的解决方案,直到今天在研究Guava的Ordering类源码的时候,才发现Google的牛人已经解决了这个问题,并且给出的算法相当巧妙,复杂度也很低。因为该算法不是我想出来的,我只是把注释和代码简单翻译了一下,所以这篇文章的类别还是归类为翻译比较合适吧!
如果有兴趣,大家可以自己翻看一下Guava中Ordering类的源码,相信会有更多收获!
对于这道题,其实我之前也没有找到一种最优的、面试官最想听到的解决方案,直到今天在研究Guava的Ordering类源码的时候,才发现Google的牛人已经解决了这个问题,并且给出的算法相当巧妙,复杂度也很低。因为该算法不是我想出来的,我只是把注释和代码简单翻译了一下,所以这篇文章的类别还是归类为翻译比较合适吧!
如果有兴趣,大家可以自己翻看一下Guava中Ordering类的源码,相信会有更多收获!
相关文章推荐
- Python实现:斐波那契数列、交换两个变量的值、从一组数据中找出最大最小值
- Java实现 找出数组中出现次数超过数组长度一半的元素
- 基于二叉树和数组实现限制长度的最优Huffman编码
- 一个长度为N的数组中包含正数 负数 0,请实现一个函数找出和为0的最长子数列
- PHP实现找出数组中出现次数超过数组长度一半的数字算法示例
- 基于二叉树和数组实现限制长度的最优Huffman编码
- 用最简单的方法实现---C++输入10个数存到数组,找出最小值并与第一个元素交换
- 数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数。java实现
- 从一个数组中找出第k小元素的随机化算法 c语言实现 算法导论第九章
- 关于使用定义函数来实现对于数组c中的元素进行筛选最大值最小值,计算平均值等操作
- 从一个数组中找出几个数,使其相加等于某个值的算法(数组元素可以重复)
- 一个简单的实现找出数组中一个数字出现次数最多的数字的算法
- 程序员面试100题(算法)之找出数组中两个只出现一次的数字(位运算实现)
- 假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(消除 qosrt 快速排序 哈希)
- C 语言 实现 字符串 分割 函数(返回"二维字符数组",及分割后的字符数组的长度)
- C语言用堆和双向链表实现可变长度数组
- 如何找出数组中元素之和为特定数的最优组合
- 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
- 数组中一个数字出现的次数超过了数组长度的一半,找出这个数字
- 找出数组中出现次数超过数组长度一半的数字