问一个腾讯的算法题:有一个 vector 容器中,存有 1 亿个 qq 号(不重复),如何快速挑选出其中奇数号码?

2015-04-07 22:22:37 +08:00
 wind3110991

如题,今年春季的笔试题,不知道腾讯想表达什么意思,自己不是很精通STL。
感觉直接遍历一遍然后考察vector[i]>>1;
如果奇数就提出来,算法开销O(n),不知道是不是有什么更好的方法?
大神勿喷,这题有没有必要用hash?

5256 次点击
所在节点    C
48 条回复
jiang42
2015-04-07 22:54:56 +08:00
听说腾讯有让做fib53的,我觉得。。。这题O(n)算法就行了?
vibbow
2015-04-07 23:31:57 +08:00
直接循环一遍,在内存里判断QQ号最后一位二进制是不是1?
wind3110991
2015-04-07 23:36:31 +08:00
@vibbow 我也觉得。。不知道他要表达什么了
wind3110991
2015-04-07 23:36:55 +08:00
@jiang42 fib53?斐波那契?
xvsfezz
2015-04-07 23:45:57 +08:00
内存够不够。。
wy315700
2015-04-08 00:02:27 +08:00
是不是不允许copy
wind3110991
2015-04-08 00:08:17 +08:00
@xvsfezz 假如不够呢,是不是hash到n个文件里?
HanSonJ
2015-04-08 00:12:09 +08:00
明天面试楼主才来问之前的问题…
wind3110991
2015-04-08 00:18:59 +08:00
@HanSonJ 今天看大数据时突然想起没有比较好的解决方案,身边同学也觉得题有问题,就搁浅了,你觉得怎么解决?
wind3110991
2015-04-08 00:19:38 +08:00
@wy315700 好像没提到
HanSonJ
2015-04-08 00:21:37 +08:00
@wind3110991 我是战斗力只有5的渣
spacewander
2015-04-08 00:27:24 +08:00
count += (v[i] & 1);
类似这样?
没用无重复的条件,但是O(n)加较小的常数因子,感觉没有比它更快了
再快就只能用并行算法了……
acros
2015-04-08 01:09:13 +08:00
考内存管理的效率吗?
qq号一亿个int,长度按4算,内存肯定不够一次载入。
另外还有vector内部内存模型问题吧,我需要复习下.....
acros
2015-04-08 01:14:35 +08:00
2了,现在qq号是11位以上了吧?存的string还是数值?
jesse_luo
2015-04-08 01:16:15 +08:00
@acros QQ 号好像有11 位了? 所以按 64 位计算,8*100000000 Byte 约为 700 多 MB吧

可能要考虑 QQ 号数据动态变化,能多次迅速计算?
acros
2015-04-08 01:24:39 +08:00
@jesse_luo 怀疑int够不够....好像需要收集很多前置条件
acros
2015-04-08 01:27:34 +08:00
@jesse_luo 估计考官第一条审批还是看有没区分64,32呢....
jiang42
2015-04-08 04:21:44 +08:00
@wind3110991 对啊。。。
NCE
2015-04-08 08:49:56 +08:00
11wei % 2
lucifer9
2015-04-08 09:15:30 +08:00
给所有qq在线用户弹窗:
今天是马化腾的生日,挑出以下所有的偶数号码并回复偶数号码的个数有机会点亮头像哦

然后每个用户发10个号码,正好用上号码不重复的条件
运气好的话一遍就出来结果了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182211

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX