BitMap是用bit位来记录数据存在与否的一种算法。在处理大数据时,可以节省大量空间,速度也很快。
问题:已知有n个整数,这些整数的范围是[0,100],请你设计一种数据结构,使用数组存储这些数据,并提供两种方法, 分别是addMember和isExist.下面是这种数据结构的类的定义。
思路1:用数组存储,查找是否存在需要for循环n, 有n个数那么复杂度为O(n)
思路2: 用数组存储,添加数据则arr[index] = 1, 这样查找是否存在有n个数赋值度为O(1),,直接用过数组下标判断是否为1
思路3:加入有1亿个数呢, 上面思路2则会造成空间浪费, 我们可以用过1个整数表示32字节,每个字节则可以表示一种状态,这样空间上缩小了1/32
class BitMap {
constructor(size) {
this.bitArr = new Array(size)
// 初始化操作
this.bitArr.fill(0)
}
/**
* 添加一个数据
* @param {*} data
*/
addMember(data) {
// 1. 计算索引
let cur_index = Math.floor(data/32)
// 2. 计算传入的data在当前索引中位数(1个索引可以表示32位)
let bit_index = data % 32
// 3. 计算加入后的数据,并存储
this.bitArr[cur_index] = this.bitArr[cur_index] | 1<<bit_inde