腾讯面试题,大家来讨论一下呀~

wuzsh 2008-06-15 10:29:35
给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中
...全文
13688 320 打赏 收藏 转发到动态 举报
写回复
用AI写文章
320 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahaidefeng 2012-04-24
  • 打赏
  • 举报
回复
分支哈希
yong6485780 2012-04-21
  • 打赏
  • 举报
回复
发现自己好菜
chenou851123 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

使用位图法判断整形数组是否存在重复
判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。

位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1,如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1……
[/Quote]

学习哦
阿QQ 2012-04-18
  • 打赏
  • 举报
回复
位图索引,还有其他的好办法吗

欢迎使用本人作品【万能代码生成器】http://download.csdn.net/detail/lzq1205/4062483,适应任何企业和个人,自定义模板.
erick08 2012-03-06
  • 打赏
  • 举报
回复
位图法,厉害,学习了 ~
speedmancs 2012-03-06
  • 打赏
  • 举报
回复
这个题在编程珠玑的前两章中有。
studygirl002 2012-03-05
  • 打赏
  • 举报
回复
不错的问题
yxy032 2012-03-04
  • 打赏
  • 举报
回复
菜鸟,没看懂~
DeDeWo 2012-02-28
  • 打赏
  • 举报
回复
纠结,这是面试题,不一定有一个确定的答案,主要看你的分析能力。另外这个问题在这里谈论过N次了,我这个外行人都懂了,LZ应该常来逛逛啊
StudyTCPIP 2012-02-19
  • 打赏
  • 举报
回复
mark
vanxeger 2012-02-17
  • 打赏
  • 举报
回复
mark!头都看晕了!
Smile_Tiger 2012-02-07
  • 打赏
  • 举报
回复
利用了计算机的寻址
NowDoIT 2012-01-31
  • 打赏
  • 举报
回复
[Quote=引用 307 楼 qman007 的回复:]
引用 11 楼 bellbird 的回复:
引用 5 楼 oo 的回复:
位图法每个bit只是代表元素下标(Index),并不代表元素本身的值,40亿个元素
的值可以是离散的,非连续的,位图法无法避免元素的值互相比较,所以根本不适用,
或者说是拿菜刀钉钉子
[/Quote]

顶这位朋友的话。
我觉得这道题很不严谨!
hkdbjf 2012-01-05
  • 打赏
  • 举报
回复
关注学习,高手如林。。。
qman007 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bellbird 的回复:]
引用 5 楼 oo 的回复:
申请512M的内存
一个bit位代表一个unsigned int值
读入40亿个数,设置相应的bit位
读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在

虽然知道这个方法,可是没想过把int数全部存完只需要512M就够了,惊叹了一下
[/Quote]

位图法每个bit只是代表元素下标(Index),并不代表元素本身的值,40亿个元素
的值可以是离散的,非连续的,位图法无法避免元素的值互相比较,所以根本不适用,
或者说是拿菜刀钉钉子
纯净水o 2012-01-02
  • 打赏
  • 举报
回复
来看看 学习
feifei鱼 2012-01-01
  • 打赏
  • 举报
回复
怎么那么给力,好难啊
CCM163 2011-11-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oo 的回复:]
申请512M的内存
一个bit位代表一个unsigned int值
读入40亿个数,设置相应的bit位
读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在
[/Quote]


学习了
zheng_ai 2011-11-27
  • 打赏
  • 举报
回复
可以考虑使用布尔过滤器。
简单描述一下吧:
假设你有四个哈希函数,Hash1, Hash2, Hash3, Hash4,哈希函数的输出范围为0到N-1
申请一个bool buffer[N],初始化全为false。
输入一个整数n,可以计算出四个哈希值:n1, n2, n3, n4。将buffer[n1],buffer[n2],buffer[n3]和buffer[n4]置为true。
将40亿的数据预处理一遍。
查询x是否存在时,首先计算出x的四个哈希值:x1, x2, x3, x4,以buffer[x1], buffer[x2], buffer[x3], buffer[x4]都为true作为x存在的依据。

这个方法会有误差。
依文依叶 2011-11-23
  • 打赏
  • 举报
回复
折半查找行不
加载更多回复(300)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧