面试题:给40亿个不重复的无符号整数,没排过序,给一个无符号整数如何快速判断这个数是否在这40亿个数中

//**********************位图***********************//腾讯面试题:// 给40亿个不重复的无符号整数,没排过序,给一个无符号整数如何// 快速判断这个数是否在这40亿个数中//解题思路://(1)直接存进内存//40亿个无符号数,如果放到内存,就需要开辟4*4G=16G的空间,因为数的范围不确定,所以//开辟尽可能大的空间来存放,需42亿9千万×4字
摘要由CSDN通过智能技术生成
//**********************位图***********************

//腾讯面试题:
//           给40亿个不重复的无符号整数,没排过序,给一个无符号整数如何
//           快速判断这个数是否在这40亿个数中

//解题思路:
//(1)直接存进内存
//40亿个无符号数,如果放到内存,就需要开辟4*4G=16G的空间,因为数的范围不确定,所以
//开辟尽可能大的空间来存放,需42亿9千万×4字节的空间
//(2)位图   
//位图:在一块内存区域的每个比特存0或1,表示其对应的元素不存在或者存在
//位图优点: 速度快,内存空间占用小,能表示大范围的数据

//比较:用位图的话,需(42亿9千万×4字节)/32字节=大约500M的空间内存就可以
//      把40亿个数全部放进内存

//按位与&:都为真时才为真,即都为1时才为1
//按位或|:都为假时才为假,即都为0时才为0
//按位异或^:两个数不同时为1
//左移<<是往高位移     如在一个从0到31的比特位中,让1<<2,则比特位变为00100000  00000000   00000000  00000000
//右移>>是往低位移   x>>1等于x/2   x>>5等于x/32

#include <iostream>
#include <vector>
using namespace std;

class BitMap
{
public :
                BitMap( size_t range )
                                :size(0)
                {
                                arr.resize(( range >> 5) + 1);</
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值