有10亿个整数,要求选取重复次数最多的100个整数
要解答这个问题,首先要弄清楚下面几个条件。
(1)有内存限制吗?
(2)整数的范围是多少?有符号,无符号,32位还是64位?
(3)整数集的内容大吗?(即出现的整数空间的大小大吗?)
(4)如果只需要求模糊解,怎么解?
(5)求数组中的第k大元素?
(6)相关问题:求一个整数列中出现次数最多的整数
(7)相关问题:有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。
(1)如果没有内存限制,且假设是32位无符号的整数。最方便的办法就是建立一个整形数组,int hash[2^32](赞不考虑程序的虚地址空间上限),然后对这10亿个数进行一次遍历,这样,可以得到这2^32个数各自出现的次数,再对这个 hash数组进行取第k大元素,100次后,就可以取出这出现次数最多的前100个数。遍历10亿个数的时间复杂度是O(n),n=10^10,求第k大 元素的时间复杂度是O(m),m=2^32(=4294967296),那么本算法的时间复杂度是O(n),空间复杂度是O(s),s=2^32。内存要 2^32*4=16G
有10亿个整数,要求选取重复次数最多的100个整数
最新推荐文章于 2021-02-22 21:04:17 发布
解决这个问题有多种方法,包括不限于无内存限制时使用整数数组,内存受限时的分段处理,使用哈希表统计以及随机采样等。时间复杂度和空间复杂度会根据不同的算法而变化。对于内存有限的情况,可以将整数空间分段并分别处理,最后再求解第k大元素。
摘要由CSDN通过智能技术生成