腾讯面试题——位图的应用

题目:

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


set()函数图解

腾讯面试题——位图的应用_第1张图片

reset()函数图解

腾讯面试题——位图的应用_第2张图片

“BitMap.h”

#pragma once
#include

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<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< _bitmap;	
};
“test.cpp”

#include
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)"<



你可能感兴趣的:(面试题,笔试面试题,数据结构)