传说浙大有一个面试题是要快速找到1到N中缺少的一个数字,有一个很经典的做法是把N-1个数字加和,减去1到N的和,但是当N非常很大的时候,复杂度为O(Nlog(N^2)/32) = O(Nlog(N)/16),和会达到2logN的bit位。
我偶然想到了一个方法,设f(n) = 1 xor 2 xor … xor n
f(n) =
n , n % 4 == 0
1 , n % 4 == 1
n +1 , n % 4 == 2
0 , n % 4 == 3
设输入的n-1个数字的异或和为s, 那么所求答案就为 f(n) - s. 复杂度为O(Nlog(N)/32),即只使用log(N)长度的bit位。
不知道有没有更加优秀的方法,请各位大佬指点。
本文介绍了一种高效查找从1到N中缺失数字的方法。通过利用异或运算的特性,可以在O(Nlog(N)/32)的时间复杂度内解决问题。文章还提供了一个公式,用于根据N的取余结果直接计算异或和。

被折叠的 条评论
为什么被折叠?



