现有一百万个数(无规律,可重复),把这些数复制一份,发现多了一个(一百万零一个),怎么用最快的方法找到多了什么数?
1
skydiver May 15, 2014 异或
|
2
dennisyang May 15, 2014
分块hash?
|
3
john990 OP |
7
bengol May 15, 2014
为什么会多了一个?
|
10
txx May 15, 2014
|
11
jsonline May 16, 2014
对啊,为什么会多一个,搞清楚这个问题价值会更大吧。
|
12
wy315700 May 16, 2014
把所有的数异或一下 最后的结果就是那个多出来的数
简单的面试题 |
13
stevenyou May 16, 2014 sum(一百万零一个) - sum(一百万个数)
得到的结果就是多的那一个 |
14
stevenyou May 16, 2014
效率是O(n)
|
17
stevenyou May 16, 2014 @cassyfar 是有overflow的问题,但是从两个数可以看出来的。如果是32bit int
sum(一百万零一个) = -32768 sum(一百万个数) = 32767 可以知道多出的那个数是1 当然了,xor的方法是最好的。 |
20
riaqn May 16, 2014 |
22
Virtao May 17, 2014
之前V2EX上就有个类似的题目,再次分享我的总结:
http://blog.virtao.org/articles/163.html 另外严重同意 @skydiver 的说法,这类题目玩玩可以,当面试题没意义。万一碰到个大牛恰好这个题目没碰到过呢? |