面试问题2:给一个5G的大文件,保存的数据为32位的整型,找到所有出现次数超过两次的数字
问题描述:给一个5G的大文件,保存的数据为32位的整型,找到所有出现次数超过两次的数字
大数据操作:
解决方法一:
依次遍历文件数据,
开始32二进制清0
每次读取一个数,先和二进制位与,如果为0 则没有,再把数字与二进制数位或。如果为1,则输出这个数
直到读取文件最后一个数字
举例说明:
0000 0000 0000 0000 0000 0000 0000 0000 开始的二进制位 倘若第一个数为2 那么
0000 0000 0000 0000 0000 0000 0000 0010 开始位与 结果不为2, 则二进制里面没有2 这个数字,然后用二进制与当前数字或运算结果为
0000 0000 0000 0000 0000 0000 0000 0010 再次读取一个数字 如果为 3 则开始先和新的二进制数位与
0000 0000 0000 0000 0000 0000 0000 0011 位与结果为 0000 0000 0000 0000 0000 0000 0000 0010 结果不是3 则在和二进制位与那么现在的二进制数为:
0000 0000 0000 0000 0000 0000 0000 0011 在读取 一个数字 如果为8 和二进制数为与
0000 0000 0000 0000 0000 0000 0000 1000 结果为0,不等于,说明没有8,则再次为或
0000 0000 0000 0000 0000 0000 0000 1011 新的二进制数,在读取一个数字,如果为8
0000 0000 0000 0000 0000 0000 0000 1000 位与,等于........1000 位与结果为8 那么8 就是出现2次的那个数字,
一下同理读取文件数据,直到文件结束。
作者: 伊甸一点
出处: http://www.cnblogs.com/zpfbuaa/
本文版权归作者伊甸一点所有,欢迎转载和商用(须保留此段声明),且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文链接 如有问题, 可邮件(zpflyfe@163.com)咨询.