您的位置:首页 > 其它

高字节\低字节 处理大文件中找数字的问题(留给自己看)

2013-10-08 19:58 162 查看
在磁盘上有一个文件,里面只含有(2的32次方-1)个数字,每个数字都是处于[0,2的32次方]之间。

但是可以使用的内存仅仅有数百K字节左右。

请使用任何一种编程语言(伪代码也行),找出任意一个属于[0,2的32次方]之间并且没有在这个文件中出现数字。

如下:

开一个unsigned int count[0..0xFFFF] 的数组。需要65535 * 4 / 1024 = 252KB的内存。

初始化为0.

然后做一次扫描,每读一个数字K,则其低字的计数器加一,即: count[ k & 0xFFFF ] ++;

扫描完整个文件之后,至少会有一个计数器的值小于 0x10000,说明这个低字等于该值的数字至少有一个没有出现。

记下该值,设为low

然后再次将count数组清0。再做第二次扫描,对于每一个数字K,先判断其低字是否等于 low ,若等于,则将其高字的计数器加一,即: count[ k >> 16 ]++;

然后再扫描一遍count数组,只要是count[i] == 0的,就说明高字为i ,且低字为low的数字没出现过。

此时 (i << 16) | low 为所求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐