所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key便是该元素。因为采用了Bit为单位来存储数据,所以在存储空间方面,能够大大节省。面试
腾讯面试的时候,让写了一个BitMap,之前没怎么写过,不知道如何去写,当时只是知道哪一位置存在置为1,不存在置为0;脑壳一热,居然去移位计算了,后来面试官给我说了这是错误的写法,本身面试结束后,对BitMap这块知识及时充电。数组
首先计算val属于BitMap数组模块的索引index = val / bitLen;spa
而后计算val所属这个模块的偏移量 pos = val % bitLen;code
这样就能够知道val在Bit图中的位置;blog
const int N = 10000; const int bitLen = (1 << 8); int arr[N+1] = {1}; int BitMap[1 + N/bitLen] = {0}; void SetVal(int val) { BitMap[1 + val >> 8] |= (1 << (val & 0xFF)); //计算val处于那个Bit块中的位置,将其置位1 } //检查是否存在val值 bool CheckVal(int val) { return BitMap[1 + val >> 8] & (1 << (val & 0xFF)); } //N个随机数的产生 void GetRand() { for(int i=1; i <= N; i++) arr[i]=i; int i, j; for(int k=0; k < N; k++) { i = (rand() * RAND_MAX + rand()) % N; j = (rand() * RAND_MAX + rand()) % N; swap(arr[i], arr[j]); } }