数的判断
题目如下
7、腾讯面试题:给40亿个不重复的unsignedint的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
分析:1个unsigned int占用4字节,40亿大约是4G个数不到,那么一共大约要用16G的内存空间,如果内存不够大,反复和硬盘交换数据的话,后果不堪设想。
位图法://腾讯面试题:给40亿个不重复的unsignedint的整数,没排过序的,
//然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
//位图法,占内存512MB
//一个unsigned int 能表示的数是0~2^32-1
#include <iostream>
#include <string>
using namespace std;
//一个unsigned int 可以表示32个数
#define MAX 1<<27
unsigned int num[MAX]={0};
void main()
{
for(unsigned int i=1;i<=10000;i++){
unsigned int index = i/32;
unsigned int bit = i%32;
num[index]|=1<<bit;
}
unsigned int n=100;
if(num[n/32]&1<<(n%32))cout<<"Exist";
}