问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
2010-08-31 15:30
831 查看
问题描述如下:
有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明);
要求找出这2.5亿个数字里面,不重复的数字的个数
;
另外,可用的内存限定为600M;
要求算法尽量高效,最优;
解决方案:
其实分两次算,先算<0部分再算>0部分
则每次统计的数的个数为2^31
以512的内存,每个数以2bit的空间就能存储足够的信息了
1,申请512M内存,作为一个数是否存在的标记flag,全清0
2,设置记数器 count,清0
3,读入一个数,如果>=0则查看相应flag:如果为0,flag置1,count加1;如果为1,flag置2,count减1;如果为2,不处理
4,重复3,直到所有整数处理完毕
5, 清除所有的flag(不清除count)
6,读入一个数,如果<0则查看相应flag:如果为0,flag置1,count加1;如果为1,flag置2,count减1;如果为2,不处理
4,重复6,直到所有整数处理完毕
嘿,同志们,俺就没搞清楚18楼的算法:
A:int的值域有4G之多,使用512M,那512M中的每个BYTE必需要能表示8个数字,而BYTE只能表示最多8位。
B:如果每BYTE中,需要2bit来表示一个数字的存储,则每BYTE只是4个数字,而512M只能是2G个数字,则对int的值域表示不完。
所以说我没看懂。请各位解答一下。
所以需要分大于0和小于0来进行计算,这样也是为了节省空间
有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明);
要求找出这2.5亿个数字里面,不重复的数字的个数
;
另外,可用的内存限定为600M;
要求算法尽量高效,最优;
解决方案:
其实分两次算,先算<0部分再算>0部分
则每次统计的数的个数为2^31
以512的内存,每个数以2bit的空间就能存储足够的信息了
1,申请512M内存,作为一个数是否存在的标记flag,全清0
2,设置记数器 count,清0
3,读入一个数,如果>=0则查看相应flag:如果为0,flag置1,count加1;如果为1,flag置2,count减1;如果为2,不处理
4,重复3,直到所有整数处理完毕
5, 清除所有的flag(不清除count)
6,读入一个数,如果<0则查看相应flag:如果为0,flag置1,count加1;如果为1,flag置2,count减1;如果为2,不处理
4,重复6,直到所有整数处理完毕
嘿,同志们,俺就没搞清楚18楼的算法:
A:int的值域有4G之多,使用512M,那512M中的每个BYTE必需要能表示8个数字,而BYTE只能表示最多8位。
B:如果每BYTE中,需要2bit来表示一个数字的存储,则每BYTE只是4个数字,而512M只能是2G个数字,则对int的值域表示不完。
所以说我没看懂。请各位解答一下。
所以需要分大于0和小于0来进行计算,这样也是为了节省空间
相关文章推荐
- 软件开发者面试百问-----有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 已知一个数组int[98],该数组里面存储了0~99共100个数字中的98个,数字不重复,请用算法算出0~99中缺少的2个数字是哪两个?
- 计数排序——有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
- 快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数。 输入 给出一个正整数数N(N<=
- 有个数组中有100w个数,其中有一个数重复了50w次,要求找出这个数字
- 问题描述大概如下:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 取值为[1,n-1]含n个元素的整数数组,至少存在一个重复数,即可能存在多个重复数,O(n)时间内找出其中任意一个重复数,不使用额外存储空间。
- 素数距离问题 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数
- 1到100,放在长度99的数组里,有一个没有在里面,编程找出那个数
- 一个整数数组里面,除了两个数之外,其他的数字都出现了两次,写一个程序找出这两个数
- 有一组数字,从1到n,从中减少了3个数,顺序也被打乱,放在一个n-3的数组里,请找出丢失的数字,最好能有程序,最好算法比较快
- 一个无序整数数组,数组元素大于5个,请用一种高效的算法找出其中最大的5个值.
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 写一个算法实现在一个整数数组中,找出第二大的那个数字。
- 算法3:找出一个整数数组里面两个查值最大的两个下标a[j]-a[i]最大并且i<j
- randnumber_mn.c 生成一个数组,包括k个不重复的整数,并且要求这些整数范围为[m,n),生成的结果中不能包含inum中的数字,size表示inum的长度
- 【算法】(遇到的问题)给定一个数组,找出不在数组中的最小的那个数字
- 面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!
- 算法 - 有一个连续整数序列,里面随机存放的是0到99这100个不重复的整数,要求对该序列排序。