看到这样一道面试题,我们不由的想到前边学习过的哈希表,哈希表查找效率高,唯独就是 空间浪费有点大。而在这道题目之中,40亿个无符号数(表明最高位表示大小),几乎涵盖了整形里的所有的数(总共42亿9千多)。而42亿9千多的数全部放到内存大约需要4G*4 = 16G,加上操作系统,各种运行软件,我们普通的计算机是无法运行这42亿数字的,除非超级计算机。所以,按照将每个数字都占用一个整形空间的方式导入内存的方式是不可取的。我们知道,数据在计算机中都是以二进制格式存储的,或0或1,我们不妨用每一个二进制位(比特位)来存储一个数,存在的话置为1,不存在置为0,这样的话,一个int可以表示32个数字。所有的数据会只占用到16G/32 = 500MB,一般的计算机还是可以满足这个请求的。40亿个数字,只能存储到硬盘,查找的时候导入内存就好了。下边给出实现代码~~~“
#pragma once
#include<iostream>
using namespace std;
#include<vector>
class BitMap
{