1.腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

思想:用数组来存这40亿个数,而且只能用bit来表示。why?40亿约等于4G,就算你用一个字节来,也需要4GB,32位的机子爆掉了。如果用bit来存,意思一个字节就能表示8个数,这个样子只需要512M内存。这个属于接受范围。如果有内存要求,则可以分块。

如何用bit位表示某个数?下面以1为例。

  • 1/8=0,即存在数组的第0位。
  • 1%8=1,即存在数组第0位的char的第1位,将该位置为1。

在举个例子,12345。

  • 12345/8=1543,即数组的第1543位
  • 12345%8=1,即存在数组的第1543位的char的第1位,将该位置为1。

我们以16进制来表示char中每一位单独置为1的情况,即0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01。

如何判断将某一位置为1?

以将a[0]的第二位置为1为例,用位或。a[0]=a[0] | 0x20;

判断某一位是否置为1?

判断a[0]的第二位是否置为1,用位与,a[0] &0x20.如果置为1,返回非0,否则返回0.

[cpp] view plaincopyprint?
  1. #include<iostream>
  2. #include<string.h>
  3. #include<fstream>
  4. using namespace std;
  5. void setBit(char *arr,unsigned int num);
  6. int isSet(char *arr,unsigned int num);
  7. unsigned char tag[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  8. int main()
  9. {
  10. char * arr=new char[5242880];//512M
  11. memset(arr,0,5242880);
  12. unsigned int num;
  13. fstream in("1.txt",ios::in);
  14. while(in>>num)
  15. {
  16. setBit(arr,num);
  17. }
  18. in.close();
  19. cout<<"初始化完毕..."<<endl;
  20. cout<<"请输入需要判断的数:";
  21. while(cin>>num)
  22. {
  23. if(isSet(arr,num)!=0x00)
  24. {
  25. cout<<num<<"在数组中"<<endl;
  26. }else
  27. cout<<num<<"不在数组中"<<endl;
  28. }
  29. delete[] arr;
  30. return 0;
  31. }
  32. /*
  33. *功能:将num对应位置为1
  34. */
  35. void setBit(char *arr,unsigned int num)
  36. {
  37. int loc=num/8;
  38. int remainder=num%8;
  39. arr[loc]=arr[loc] | tag[remainder];
  40. }
  41. /*
  42. *功能:判断num对应位是否置为1?
  43. */
  44. int isSet(char *arr,unsigned int num)
  45. {
  46. int loc=num/8;
  47. int remainder=num%8;
  48. return arr[loc] & tag[remainder];
  49. }

腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?相关推荐

  1. 算法面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

    问题描述:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 问题分析:40亿 不重复 ,没有排序. 40亿个unsigned i ...

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

    给40亿个不重复的无符号整数,没排过序,给你一个无符号整数,如何快速判断这个数是否在这40亿个数中? 首先看到这个题第一个想到的就是遍历一遍,看这个数在不在.但是这样的时间复杂度太高了O(N),数据量 ...

  3. 海量数据:快速查找一个数字是否出现在40亿个数字中

    腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 看到问题的想法是采用bitmap:1个字节可以表示8个整数是否出现 ...

  4. 【转】IT名企面试:腾讯笔试题(2)

    摘要:想要进入腾讯公司,面试笔试题是一定要有所准备的.那么这里我们总结了一些腾讯笔试题,例如:const的含义及实现机制等问题. 腾讯是国内数一数二的IT企业了.那么每年想要进入腾讯公司的应聘者也是络 ...

  5. 一道腾讯面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?布隆过滤器...

    何为布隆过滤器 还是以上面的例子为例: 判断逻辑: 多次哈希: Guava的BloomFilter 创建BloomFilter 最终还是调用: 使用: 算法特点 使用场景 假设遇到这样一个问题:一个网 ...

  6. put url带参数_一道腾讯面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?...

    来源:http://rrd.me/ekN8q 何为布隆过滤器 还是以上面的例子为例: 判断逻辑: 多次哈希: Guava的BloomFilter 创建BloomFilter 最终还是调用: 使用: 算 ...

  7. 同宇新材再更新招股书:继续冲刺创业板上市,计划募资13亿元

    近日,同宇新材料(广东)股份有限公司(下称"同宇新材")更新招股书(申报稿),准备在深圳证券交易所创业板上市.据贝多财经了解,同宇新材的招股书于2022年6月28日获得受理,目前已 ...

  8. 如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?

    假设遇到这样一个问题:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M ...

  9. mysql腾讯面试题_2020腾讯阿里精选面试题100+(包含答案)

    前言 武功再高,也怕菜刀,确认过眼神,你得是对的人才行.就算是技巧,也要建立在硬核实力上面. 本文总结的是关于BAT的精选面试题 由于面试题较多,篇幅过长.就没有一 一展示出来了,面试题获取看我个人介 ...

最新文章

  1. SQL Server 批量主分区备份(One Job)
  2. docker挂载目录原理
  3. 浅谈视觉设计的准确性
  4. futuretask java 并发请求_图文并茂理解 Java 多线程
  5. linux如何时间更新最新版本,桌面应用|Linux有问必答:如何更新过期版本的Ubuntu...
  6. java程序并行机制_Java语言具有多种优点和特点,下列选项中,______反映了Java程序并行执行机制的特点。A.多线程B.健...
  7. axios发送请求(baseURL有多个的情况)
  8. 项目配置不当引发了数据泄露,人已裂开!!
  9. [D3] Start Visualizing Data Driven Documents with D3 v4
  10. PCL——快速邻域搜索
  11. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_16_常用的函数式接口_Function接口中的方法Apply...
  12. Nginx系列(3):Nginx配置文件nginx.conf中文详解
  13. HashMap排序(java)
  14. python爬虫——爬取汽车之家新闻
  15. 链接形式的客服代码 QQ客服代码
  16. easyX——图形库
  17. 微信小程序总结(阶段第一次总结)
  18. html多行多列的表单,如何制作多行多列的表格
  19. 启发式搜索A*算法【引入及思想】
  20. 关于电子科技大学宿舍安装热水的调查

热门文章

  1. 2021年春季学期-信号与系统-第六次作业参考答案
  2. 世界上最美丽的23个公式
  3. 第15届全国大学生智能汽车竞赛 人工智能挑战赛(百度)
  4. 马莉 - 人神共愤的处女座
  5. 智能车竞赛自动裁判系统
  6. 2017青岛计算机报名,【青岛市2017年第二批次计算机应用能力考试报名通知】- 环球网校...
  7. 五子棋博弈树剪枝c语言,五子棋AI博弈树之带Alpha-Beta剪枝的极大极小过程函数...
  8. FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?
  9. HDLBits 系列(5)让三元条件运算符(?:)在你的设计中发挥作用
  10. Verilog系统函数(一) $display