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