基于visual Studio2013解决面试题之1204大数组查找




题目



解决代码及点评

/*
	有40亿个整数,在文件里保存,现在要找出这个文件里没有的某个整数,找到一个就行
	这个40亿个整数大概要花掉4G内存,全部读出来是不可取的
	我们可以通过位域来标记哪些存在哪些不存在
	这样一个整数可以表示32个整数的存在情况,需要的内存是4G/32 = 1G/8 = 128M
	然后将整数一个个读出来,根据整数的值,标记位域,最后再查找位域,哪个位置是0即可
*/

#include <iostream>
#include <stdio.h> 
using namespace std;
#define BITSPERWORD 32 
#define SHIFT 5 
#define MASK 0x1F 
#define N 10000000 
int a[1 + N/BITSPERWORD]; 
void set(int i) 
{ 
	a[i>>SHIFT] |= (1 <<(i & MASK));   //第i位清零
} 
void clr(int i)
{ 
	a[i>>SHIFT] &= ~(1 <<(i & MASK)); //第i位1
} 
int test(int i)
{ 
	return a[i>>SHIFT] & (1 <<(i & MASK)); 
} 
int main(){ 
	int i; 
	for (i = 0; i < N; i++) 
		clr(i); 
	while (scanf_s("%d", &i) != EOF) 
		set(i); 
	i = 0;
	while(i<N)
	{
		if (test(i)) 
		    cout<< i<<" ";
		i++;
	}
	system("pause");
	return 0; 
}


代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果









posted on 2013-12-20 22:30  三少爷的剑123  阅读(152)  评论(0编辑  收藏  举报

导航