现在 有10亿个int型的数字(JAVA中 int 型占4B),以及一台可用内存为1GB的机器,如何找出这10亿个数字的中位数? 中位数定义:数字排序之后,位于中间的那个数。比如将10亿个数字进行排序(位置从1到10亿),排序之后,位于第5亿个位置的那个数 就是中位数。 关于中位数 ...
内存足够的情况: 可以使 用类似quick sort的思想进行,均摊复杂度为O n ,算法思想如下: 随机选取一个元素,将比它小的元素放在它左边,比它大的元素放在右边 如果它恰好在中位数的位置,那么它就是中位数,可以直接返回 如果小于它的数超过一半,那么中位数一定在左半边,递归到左边处理 否则,中位数一定在右半边,根据左半边的元素个数计算出中位数是右半边的第几大,然后递归 到右半边处理 内存不足的 ...
2015-09-17 17:23 0 4026 推荐指数:
现在 有10亿个int型的数字(JAVA中 int 型占4B),以及一台可用内存为1GB的机器,如何找出这10亿个数字的中位数? 中位数定义:数字排序之后,位于中间的那个数。比如将10亿个数字进行排序(位置从1到10亿),排序之后,位于第5亿个位置的那个数 就是中位数。 关于中位数 ...
以下是转载的:个人感觉第四种方法很巧妙,O(N)复杂度最好也最快!第二种方法不太理解~ 腾讯一面问到了,用的算法导论中的Kth算法,期望时间复杂度为O(n)。后来想了想,万一数据多的来根本不能一次读入内存,这个时候该如何解决呢? 题目如下:只有2G内存的pc机,在一个存有10G个整数 ...
问题描述:给一个无序数组,找到其中位数,并说出该算法的时间复杂度以及空间复杂度。 解题方法一: 中位数:当数组元素个数为奇数n时,中位数=a[n/2]。当元素个数为偶数时,中位数=( a[n / 2] + a[ ( n + 1 ) / 2 ]) 按照这个中位数定义来求解。利用 ...
比如三个整数是 10 12 11,输出11 还是按照从结果出发思考问题 我们用middle变量来存放中位数 那么肯定有int middle 用户输入三个数分别是a b c 最后的结果无非是a是中位数 或者b是中位数 或者c是中位数 如果a是中位数则,middle ...
腾讯面试题:10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。 题目和基本思路都来源网上,本人加以整理。 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间 ...
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的 空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。 分析: 既然要找中位数,很简单就是排序的想法。那么基于字节的桶排序是一个可行 ...
问题描述为: 一个无序的数列,每个数有其对应的权重,权重为非负整数,代表数列中的数字出现的次数。要求找出这一无序数列中的中位数。 1. 直接解法,先对该数列和权重排序。然后找出累计权重为中位数的数字。 时间复杂度为排序的 O(nlog(n)+n) 2. 按照快速排序 ...
什么是最简单的(希望不是太慢)的方式来计算与MySQL?我AVG(x)寻找,但我有一个很难找到计算现在一个简单的方法,我返回所有行到PHP,做一个排序,然后拿起中间行,但肯定要有简单的做它的方式一个MySQL查询。 示例数据: 对排序val给2 2 3 4 7 8 9,所以应该是 ...