有1亿到1亿的数字,但有一个数字缺失。它们都是随机可用的,你怎么能以最好的方式找到丢失的那个。
答案 0 :(得分:1)
这些只是理论上的考虑因素,但是如果数字按1,2,3...1B
排序,那么您可以将您的数字组拆分为部分1 ... 0.5B
和0.5B ... 1B
,然后检查首先是多少元素group:如果少于0.5B
个元素,则意味着缺失值介于1
和0.5B
之间,如果有0.5B
个元素,则表示缺少值介于{{1}之间}和0.5B
。继续这个过程,直到找到缺失的值。
我不知道这是否是一种非常快捷的方法,但肯定比检查每个值更快:D
也许它会把你带到路上
答案 1 :(得分:1)
如果考虑有限的记忆, 从最初开始对每个数字进行异或。然后XOR用1到1B。剩下的数字是缺少的数字。
这样的事情:
Input-1 XOR Input-2 XOR Input-3 XOR Input-last XOR ... XOR 1 XOR 2 XOR...XOR 1B
。
如果您有足够的内存,请对所有数字进行排序并按顺序搜索。
第一个是O(N)
,第二个是O(NlogN)
较小的例子:
1 xor 3 xor 1 xor 2 xor 3 => 2