腾讯面试题——位图的应用
来源:互联网 发布:上海女人护肤品 知乎 编辑:程序博客网 时间:2024/05/21 08:39
题目:
给40亿个不重复的无符号整型,没排过序。给一个无符号整数,如何快速判断这个数是否存在在这40亿个数中
set()函数图解
reset()函数图解
“BitMap.h”
<strong><span style="font-size:18px;">#pragma once#include<vector>class BitMap{public://range 范围BitMap(size_t range){//size_t有四个字节,每个字节有八个位//右移5相当于除以32_bitmap.resize((range>>5) + 1);}void Set(size_t x)//0->1{//先求出在第几个数上size_t index = x/32;//相当于x>>5//在求出在第几个位上size_t num = x%32;_bitmap[index] |= (1<<num);}void Reset(size_t x)//1->0{size_t index = x/32;size_t num = x%32;_bitmap[index] &= (~(1<< num));}bool Test(size_t x)//x存在与否{size_t index = x/32;size_t num = x%32;return _bitmap[index] & (1<<num);}private:vector<size_t> _bitmap;};</span></strong>“test.cpp”
<strong><span style="font-size:18px;">#include<iostream>using namespace std;#include"bitset.h"void test(){BitMap bm(400);bm.Set(2);bm.Set(22);bm.Set(222);cout<<"set(2) set(22) set(222)"<<endl;cout<<"set(2) ? "<<bm.Test(2)<<endl;cout<<"set(22) ? "<<bm.Test(22)<<endl;cout<<"set(222) ? "<<bm.Test(222)<<endl;cout<<"set(3) ? "<<bm.Test(3)<<endl;bm.Reset(22);cout<<endl<<"reset(22)"<<endl;cout<<"set(2) ? "<<bm.Test(2)<<endl;cout<<"set(22) ? "<<bm.Test(22)<<endl;cout<<"set(222) ? "<<bm.Test(222)<<endl;cout<<"set(3) ? "<<bm.Test(3)<<endl;}int main(){test();return 0;}</span></strong>
0 0
- 腾讯面试题——位图的应用
- 腾讯的面试题
- 腾讯面试题——指向数组的指针
- 腾讯面试题——多项式求解
- 腾讯面试题—附答案
- 进制转换—腾讯面试题
- 腾讯的一道面试题
- 腾讯的一道面试题
- 一道腾讯的面试题
- 腾讯的一个面试题
- 腾讯的一道面试题
- 腾讯的一道面试题
- 腾讯的一道面试题
- 腾讯面试题(九度)——面积最大的全1子矩阵
- 腾讯面试题——英文单词间的最短转换路径
- 腾讯面试题——返回一个数二进制序列中1的个数
- 腾讯的一道面试题—不用除法求数字乘积
- 腾讯公司的面试题[转]
- Hibernate openSession() 和 getCurrentSession的区别
- MFC 双缓冲 绘图实例
- 离线轻量级大数据平台Spark之MLib机器学习库Word2Vec实例
- RMS (Rights Management Services)基于SDK2.1的二次开发环境搭建
- angular中的$provide和$inject方法使用理解
- 腾讯面试题——位图的应用
- 远程网站监控
- 洛谷 P1270 “访问”美术馆
- HDU-2586-How far away ?
- 滚动圆角卡顿--有效(不是唯一)
- SATA SAS SSD 硬盘介绍和评测
- linux php多版本
- 人力规划系统 v1.0 - 需求分析
- HDU-5510 Bazinga(KMP)