这是比较常见的一个面试题了.
看到一篇比较好的文章,留下网址和阅读笔记.
地址:http://blog.csdn.net/shadowkiss/archive/2008/12/19/3557873.aspx
其中针对问题,算法上进行不断地优化,是一大亮点,其优化过程包括:
不假思索
stupid,[选择排序]每次找出余下数组中最大的,重复1万次.
稍作思考
快排后,提取前一万个.
深入思考
最先抽取头部1万个整数作为resultArr(排序后,找出其中最小数),之后遍历余下数据BigArray,发现有比最小数据大的,覆盖之,并重新找出最小元素,如此反复,直至bigArray遍历完全.
ps.最小元素的查找是优化重点,注意缩减查找范围.下面的优化都集中在这里.
深思熟虑
最小元素的查找在一定范围内进行,先按左大右下排列初选出的ResultArr数组,第一次最小元素指向ResultArr的尾端,每替换一次,后移一位,查找范围加一.
苦思冥想
每次的替换操作会导致resultArr无序,在替换一定次数后,重新整理resultArr,用归并使之有序.
殚思极虑
替换操作 只会导致尾部局部数据无序,只需先排序该部分数据,之后进行有序数据的合并.
ps.以上都是我自己阅读后的缩写,留待日后复习之用,很难想象不认真阅读原文能看出任何体会.
ps2.当然了,我自己也有一个思路完全不同的解法,主要思想是以快排为原型,但稍作修改.
每次按快排寻找到支点后(按从小到大),对支点左右的element个数进行判断,如若右边个数小于需要找出的元素个数,则只对支点左边的数组递归调用快排.如此反复,直至右边元素达到指定个数.至于实际的代码实现,待完成
分享到:
相关推荐
方法1是分批读取数据,每次处理100万个数,找出这100万个数中的最大1万个,然后用这些最大值作为阈值过滤掉大部分数据,重复此过程直到找到最大的1万个数。方法2是采用分块策略,比如每100万个数作为一个块,分别找...
1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...
5. 给定2.5亿个整数,需要找出不重复的整数,内存空间不足以容纳这2.5亿个整数。解决方法是使用位数组+Bloom filter来判断是否存在重复的整数。 6. 给定海量数据分布在100台电脑中,需要高效统计出这批数据的TOP10...
在内存限制为2G的情况下找出10G个整数中的中位数问题,可以使用外部排序算法将数据分块,然后使用最小堆或最大堆来维护较小的一半数据和较大的一半数据。 时分秒针每天重合的次数,可以通过计算它们的相对速度得出...
- **过程**:将整数分解成亿、千万、百万、十万、万等各个位上的数值。 - **输出**:输出各个位上的数值。 **涉及知识点**: - 整数除法与取余运算。 - 数据类型:整型变量的定义与赋值。 综上所述,这些代码示例...
1. 计数单位与进率:在数学中,我们学习过的万级计数单位包括万、十万、百万、千万,每相邻两个计数单位之间的进率是10,即“逢十进一”。 2. 大数的读法与写法:大数的读法遵循从高位到低位,每一级末尾的0都不读...
比较整数大小时,我们通常根据数位来决定:位数多的数较大,如果位数相同,则从高位开始逐位比较,直至找出大小差异。 整数的改写是为了读写便捷,可以将大数改写为以“万”或“亿”为单位的形式,有两种方式,一种...
- 在一个整数中,从右数起,第四位是千位,第十位是十亿位。 2. 数的组成: - 20800000 包含2个千万和8个十万。 - 60006000 是一个七位数,最高位是千万位,左边的6代表6千万,右边的6代表6千。 3. 大数比较: ...
若位数相同,则从最高位开始比较,最高位大的数较大,如果最高位相同,则比较下一位,直到找出差异。 6. **小数**:小数是将1分成若干等份来表示分数的一种方式。小数点右边第一位是十分位,第二位是百分位,...
而最接近100亿的数,需要将99亿9千万这个数与给定的数字进行比较,找出最接近的组合,即8765300000。 综上所述,理解和掌握数的产生、十进制计数法以及亿以上数的读写,是学习数学和计算机科学的基础,它不仅帮助...
当结果>=1万亿亿且<1亿亿亿时,以万亿亿为单位输出,例如: 已知银河系直径为10万光年、光速每秒约三十万公里,求银河系直径约多少米: %num 30w * 1000 * 60 * 60 * 24 * 365 * 10w = 9.4608WYY 当结果>=1亿亿...
5. **海量数据处理**:面试中出现了两个与大数据相关的问题,一个是找出50亿个整数中的重复数,另一个是找到1亿个数中最大的1万个数。这两个问题都考察了面试者的算法思维,如使用排序、哈希、位图等方法。 6. **...
通过逐步进位的方式,让学生理解每相邻两个计数单位之间的关系,例如,10个万等于1个十万,10个十万等于1个百万,以此类推,直至10个一千万等于1个亿。通过这种数位的概念,学生能够清晰地理解数字的构成和增长。 ...
- **题目要求**:从1亿个浮点数中找出最大的1万个数,要求时间复杂度优秀。 - **解析**: - **最小堆**:构建一个大小为1万的最小堆,遍历所有数字,将比堆顶大的数字替换堆顶,再调整堆,最后堆中保存的就是最大的...
了解这些基础知识有助于找出最大公因数和最小公倍数,以及判断两个数是否互质。 公因数是多个数共享的因数,最大公因数是这些数中最大的一个。公倍数是多个数共有的倍数,最小公倍数是最小的这样一个数。当两个数的...
此外,数的改写涉及到将整数、分数、小数改写成以“万”或“亿”为单位的数,以及使用四舍五入法、进一法和去尾法来求取近似值。 数的大小比较是数学比较的基础,对于整数、分数和小数之间的比较,需要掌握基本的...
例如,15040800.56 包含1个千万、4个百万、8个十万、0个万、0个千、0个百、5个十、6个个位和5个十分之一、6个百分之一。同样,根据题目,如果一个数的千万位、万位、百位和百分位上都是2,其他各位上都是0,那么这个...
题目中给出的数是90059000,这是一个八位数,最高位是千万位,四舍五入到亿位约为1亿。 2. **近似数的估算**: - 第2题至第4题涉及近似数的估算,如9( _ )846≈10万,需填写的最大数是99,因为99846最接近10万但...