第十二章:数的判断

来源:互联网 发布:网络捕鱼赌博游戏平台 编辑:程序博客网 时间:2024/06/05 05:59

数的判断

题目如下

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<<27unsigned 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";}  


0 0