【面试题】给40亿个无符号不重复且没排过序的数,查找一个数是否在这40亿个数之中

看到这样一道面试题,我们不由的想到前边学习过的哈希表,哈希表查找效率高,唯独就是 空间浪费有点大。而在这道题目之中,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
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值