有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明);
要求找出这2.5亿个数字里面, 不重复的数字的个数(那些只出现一次的数字的数目);
另外,可用的内存限定为600M;
要求算法尽量高效,最优;
要求找出这2.5亿个数字里面, 不重复的数字的个数(那些只出现一次的数字的数目);
另外,可用的内存限定为600M;
要求算法尽量高效,最优;
1. caoxic的算法
BYTE marks[2^29];//512M // BYTE marks[2^32/8]; //用这个就更清楚了,标志所有整数(2^32)出现的可能
BYTE repmarks[2^25];//32M 32M*8>2.5亿 //标志2.5亿个数字数组里面的数字是否重复过
const BYTE bitmarks[8]={
1,2,4,8,16,32,64,128};
DWORD CalcDifNum(DWORD *pBuf,DWORD bufcount)
{
DWORD dw ;
DWORD count = 0 ;// 不重复的数字(包括出现多次的数字,只算一个)的个数,例子:1 2 2 3 5 3 4 算5个
DWORD count2 = 0 ;//重复出现的数字的个数,例子:1 2 2 3 5 3 4 算2个
memset(marks,0,sizeof(marks));
memset(repmarks,0,sizeof(repmarks));
ASSERT(sizeof(repmarks)*8>=bufcount);