> 给定一个包含 0, 1, 2, ..., n
中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
这篇文章就是希望能给网友们提供一种新的思路,希望有缘人可以看到这种解法。
在leetcode上查看速度最高的解法,都是通过计算0-n的求和,然后遍历数组,减去所有元素的值,最终得到缺失的元素。。
这里提出一种更快的解法:异或法求解。
思路就是定义两个变量o1和o2.
o1= 0^1^2^3...^n
o2=a[0]^a[1]^a[2]...^a[n-1];
由于数组中只缺失某一元素,故该缺失的元素几位 o2^o1
class Solution {
public int missingNumber(int[] a) {
int o = 0;
for (int i = 0; i < a.length; ++i) {
o = o ^ a[i] ^ i;
}
return o ^ a.length;
}
}