怎么求中位数 java2亿个随机生成的无序整数,如何找到其中位数?
浏览量:3153
时间:2021-03-17 16:14:25
作者:admin
java2亿个随机生成的无序整数,如何找到其中位数?
因为这2亿个数都是无序整数,所以要先用数组排序,再取中间两个数的平均值。
挑战程序员同学,如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数?
一、用4字节表示的整数个数为2^32≈40亿,而用2字节表示的无符号整数个数为2^16≈6万。
二、2G=2^31B≈20亿字节。
三、要找出出现次数最多的数,则应记录每个数出现的次数,最快的方法是在内存中将每个数出现的次数记录下来,记录的方法则是内存地址对应数,相应地址的内存单元记录次数,但2G内存以字节为单位仅能记录20亿个数,且每个数出现的次数大于255将会出现溢出风险。因此,这一方案不可取。
四、这样只能将每个次出现的次数记录在磁盘上。这样在磁盘上建一个16G的文件,每4字节对应一个整数,可对应40亿个整数,并用于记录相应整数的出现的次数。
1、将文件初始化。
2、依次读取数据,并用无符号整数记录在磁盘文件中,如出现溢出,则该数为次数最多的数。
3、从文件中读取各数出现的次数,用一个变量A记录最高次数,再用一个变量B记录最高次数出现的数据个数,要用个文件依次记录最高次数出现的数。当最高次数增加时,A 1,B置1,文件中写入该数,同次数的数出现时,B 1,文件相应位置写入该数,直到全部读完。
这样根本不需2G内存。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。