面试题 17.04. 消失的数字
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
注意:本题相对书上原题稍作改动
异或运算
利用异或的特性,res = res ^ x ^ x。对同一个值异或两次,那么结果等于它本身
// 如何找这个落单的数字呢,只要把所有的元素和索引做异或运算,
// 成对儿的数字都会消为 0,只有这个落单的元素会剩下,也就达到了我们的目的。
class Solution {
public int missingNumber(int[] nums) {
int n = nums.length;
int res = 0;
// 先和新补的索引异或一下
res ^= n;
// 和其他的元素、索引做异或
for(int i = 0; i < n; i++) {
res ^= nums[i] ^ i;
}
return res;
}
}