2.5亿个整数中找出不重复的数代码实现

对于在2.5亿个整数中找出不重复的数(内存不足以容纳这2.5亿个整数),已经有众多前辈给出了比较详尽的算法描述,但在具体实现上现有的例子则比较简单,规模偏小。昨天生成2.5亿个数之后,开始读文件统计,结果10个小时左右没出结果。所以今天用25万个数做实验,几分钟就得出了统计结果。在VS2010环境里新建C++控制台工程,完整的实现代码如下。程序算法实现部分参考http://blog.csdn.net/leeboy_wang/article/details/8980682,在此向转载者和原作者表示衷心谢意。

//题目要求:在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数。
//采用2-Bitmap方法,2bit标识一个数字状态,00表示未出现过,01表示出现1次,10表出现两次或更多
#include"StdAfx.h"
#include<stdlib.h>
#include<string.h>
#include<memory.h>


//2.5亿个整数所需存储空间为2.5*10^8*4=10^9 Byte=976562.5KB=953.6743MB<1G
//num=rand();用来生成随机数,每次都生成一个介于0-RAND_MAX范围内的数。
//RAND_MAX=32767


//用char数组存储2-Bitmap,不用考虑大小端内存的问题
//2^15=32768,用两个bit标识一个随机数的状态,共需要2^16bit=2^13Bytes=8192Byte
//char数组的大小不低于8192,这里定义为8200
unsigned char flags[8200]; //数组大小自定义

//获取数字出现的次数,参数为要查看的数字
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值