题目
32位无符号整数的范围是0-4294967295,现在有一个正好包含40亿个无符号整数的文件,找到其中未出现的数可以最多使用1GB。
解法
使用哈希表占用空间太大,我们可以使用bitmap的形式表示出现位置的情况,申请一个4294967295长的bit数组bitArr,bitArr上的位置0代表没有此数,1代表出现过此数。这样即可满足题意,只需要500MB的内存。
进阶题目
内存限制10MB,但是只需要找到一个没出现的即可
解法
- 根据10MB的内存限制,确定统计区间的大小,就是第二次遍历时bitArr的大小
- 第一次遍历,利用区间计数统计每个区间的个数,找到计数不足的空间,这个空间肯定有没出现的数
- 再次遍历一遍所有数,关注计数不足的一个空间,用bitmap解决问题即可。