所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

  腾讯面试的时候,让写了一个BitMap,以前没怎么写过,不知道如何去写,当时只是知道哪一位置存在置为1,不存在置为0;脑袋一热,竟然去移位计算了,后来面试官给我说了这是错误的写法,自己面试结束后,对BitMap这块知识及时充电。

首先计算val属于BitMap数组模块的索引index = val / bitLen;

然后计算val所属这个模块的偏移量 pos = val % bitLen;

这样就可以知道val在Bit图中的位置;

const int N = ;
const int bitLen = (1 << 8);
int arr[N+] = {};
int BitMap[ + N/bitLen] = {}; void SetVal(int val)
{
BitMap[ + val >> 8] |= ( << (val & 0xFF)); //计算val处于那个Bit块中的位置,将其置位1
}
//检查是否存在val值
bool CheckVal(int val)
{
return BitMap[ + val >> 8] & ( << (val & 0xFF));
} //N个随机数的产生
void GetRand()
{
for(int i=; i <= N; i++)
arr[i]=i;
int i, j;
for(int k=; k < N; k++)
{
i = (rand() * RAND_MAX + rand()) % N;
j = (rand() * RAND_MAX + rand()) % N;
swap(arr[i], arr[j]);
}
}

BitMap(比特位)的更多相关文章

  1. 一个按比特位拷贝数据的函数copybits

    一个按比特位拷贝数据的函数 没有进行特别的优化.其实还可以在拷贝源开始位置和目标开始位置是2的整数倍位置的时候进行优化. 说明 这个函数用于从src数组首地址跳过sbb个字节,又跳过ssb个比特位,拷 ...

  2. C语言中的位操作(14)--反转比特位

    本篇文章主要讲述几种反转比特位的方法: 将一个32位数:abcd efgh 转置为hgfe dcba 1.常规方法 unsigned int v; // 目标待转置数 unsigned int r = ...

  3. 详解 比特(位,bit),字节(Byte),字符的区别 *(转)

    比特(位):英文bit,是计算机晶体管的一种状态(通电与断电).就是0与1,真与假,是计算机最基本的传输单位. 示例: 2bit : 10; 4bit : 1111; 8bit : 1111 1111 ...

  4. Leetcode之动态规划(DP)专题-338. 比特位计数(Counting Bits)

    Leetcode之动态规划(DP)专题-338. 比特位计数(Counting Bits) 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数 ...

  5. LeetCode 338. 比特位计数

    338. 比特位计数 题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 示例 1: 输入: 2 输出 ...

  6. Java实现 LeetCode 338 比特位计数

    338. 比特位计数 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1 ...

  7. leetcode TOP100 比特位计数

    338. 比特位计数 题目描述: `给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: ...

  8. BitMap - leetcode [位运算]

    136. Single Number 因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果: (2^1^4^5^2^4^1) => ( ...

  9. Leetcode——338. 比特位计数

    题目描述:题目链接 对于求解一个十进制数转化为二进制时里面1的个数,可以先看一下概况: 十进制数 二进制数 1的个数 1 1    1 2 10 1 3 11   2 4 100 1 5 101 2 ...

随机推荐

  1. JavaScript高级程序设计60.pdf

    错误处理 try-catch语句 try{ //可能会导致错误的代码 }catch(error){ //在错误发生时如何处理 } error是一个包含着错误信息的对象,它有一个message属性,保存 ...

  2. [基础] Loss function (二)

    Loss function = Loss term(误差项) + Regularization term(正则项),上次写的是误差项,这次正则项. 正则项的解释没那么直观,需要知道不适定问题,在经典的 ...

  3. 2 weekend110的zookeeper的原理、特性、数据模型、节点、角色、顺序号、读写机制、保证、API接口、ACL、选举、 + 应用场景:统一命名服务、配置管理、集群管理、共享锁、队列管理

    在hadoop生态圈里,很多地方都需zookeeper. 启动的时候,都是普通的server,但在启动过程中,通过一个特定的选举机制,选出一个leader. 只运行在一台服务器上,适合测试环境:Zoo ...

  4. 4 weekend110的textinputformat对切片规划的源码分析 + 倒排索引的mr实现 + 多个job在同一个main方法中提交

    好的,现在,来weekend110的textinputformat对切片规划的源码分析, Inputformat默认是textinputformat,一通百通. 这就是今天,weekend110的te ...

  5. Microsoft Visual Studio 2013如何设置查找头文件的路径

  6. 你为什么学MSP430

    很清楚,很明白,目的性极强,你学这个,是为了竞赛,学51也是,学习FPGA也是,你压根打心眼里就没打算走硬件方向,原因不多说,尽管你还是喜欢硬件的,但是,现实是,一个人的精力是有限的,你啊,好好弄好你 ...

  7. GlusterFS源代码解析 —— GlusterFS 日志

    Logging.c: /* Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com> This file is part ...

  8. \n 与 \r 在记事本中的内容表现方式 原创

    总结:[0D,0A]的顺序才可以记事本才可以正常显示回车换行,其他EDITPLUS ,等编缉工具在下面三种情况下都可以换行 原始数据与表现形式     [0D,0A]序列才可以正常显示回车换行 --- ...

  9. verview of Spring Framework--转

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/overview.html 2. Introduct ...

  10. PureMVC(JS版)源码解析(八):Proxy类

    前面,我们讲了与视图相关联的Mediator类,接下来我们讲讲与数据相关联的Proxy类. 关于Proxy类的作用,在Proxy类源码中,有这么一段注释:  * In PureMVC, Proxy c ...