高字节\低字节 处理大文件中找数字的问题(留给自己看)
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 为所求。
但是可以使用的内存仅仅有数百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 为所求。
相关文章推荐
- 用Excel打开csv文件时,如何处理数字内容展现会自动转换格式的问题
- jQuery中getScript方法引入外部js文件,乱码处理(自己遇到的问题)
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- 用Excel打开csv文件时,如何处理数字内容展现会自动转换格式的问题
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- 用Excel打开csv文件时,如何处理数字内容展现会自动转换格式的问题
- VirtualBox的Ubuntu中文件共享问题的解决:未处理的错误消息,获取文件"/media/sf_***"信息出错,协议错误
- nginx-upload-module文件上传模块问题处理
- 【数字图像处理】关于处理灰度图像时总是处理不全的问题
- 网站无法连接sql sever数据库的一些问题处理,解决自己定义的数据库用户名,无法关联数据库和无法登陆数据库
- ajaxFileUpload上传文件时IE浏览器弹出下载提示问题处理
- 读取excel文件显示在gridview中数据.字符.数字混合时无法全部读取的问题!
- 解决问题:由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 工作笔记-Outlook Express dbx文件超过2G导致邮件丢失问题的处理
- [置顶] 自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件
- 解决java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件
- 2013-10-28,文件编码初探(留给自己看)
- Hadoop关于处理大量小文件的问题和解决方法
- 自己动手写中文分词解析器完整教程,并对出现的问题进行探讨和解决(附完整c#代码和相关dll文件、txt文件下载)
- 因文件对象未释放导致文件无法删除问题处理或访问