给一个大小为n的数组,里面的元素为[0, n]中缺了一个数字,求缺的那个数字。
要求:
如果数组包含[1, n]那么它的和为
利用异或。
我们知道^
为:1 ^ 1 = 0
, 0 ^ 1 = 1
。
那么,就可以得到这样两个结论:
x ^ x = 0
0 ^ x = x
然后,对于这道题,我们可以另x1 = 0 ^ 1 ^ 2 ^ ....^ n
,x2 = a[0] ^ a[0] ^...a[n - 1]
最后,我们用x1 ^ x2
,可以知道:如果一个数y在a[]中出现过,假设为y ^ a[k] = 0
。
基于这个思想,假设我们没有出现的数是z,那么我们最后x1 ^ x2
的结果即为:0 ^ z = z
。
新闻热点
疑难解答