Fork me on GitHub

面试问题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次的那个数字,
一下同理读取文件数据,直到文件结束。

posted @ 2016-03-28 18:54  伊甸一点  阅读(838)  评论(0编辑  收藏  举报