#include <iostream>
#include <fstream>
using namespace std;
/*
使用位向量法解决
*/
void findNumber()
{
long long numberOfInt = (long long)INT_MAX + 1;
int len = (int)(numberOfInt / 32);
int* array = new int[len];
ifstream in("file.txt");
if (!in)
{
cout << "file open error!" << endl;
return;
}
while (!in.eof())
{
int temp;
in >> temp;
array[temp / 32] |= 1 << (temp % 32); //计算元素在位数组的位置,然后把该位置1
}
for (int i = 0; i < len; i++)
{
for (int j = 0; j < 32; j++)
{
if (array[i] & (1 << j) == 0) //扫描数组获得某一位为0,计算出不在文件中的数字
{
cout << i * 32 + j;
return;
}
}
}
}
int main()
{
findNumber();
return 0;
}
一个文件含有40亿个非负整数,使用1GB内存,找到一个不在该文件中的整数
最新推荐文章于 2021-04-23 20:17:31 发布