参考代码:
class Solution {
public int missingNumber(int[] nums) {
int res = nums.length;
for(int i = 0; i < nums.length; i++){
res ^= nums[i] ^ i;
}
return res;
}
}
大致思路:由位运算符中异或的性质:
- 0 ^ 4 = 4
- 4 ^ 4 = 0
只需要将[0,n]中范围的数与从0到n的数一起异或,最终留下来的数即为那个丢失的数。
具体实现:
令 res = nums.length;因为题中给的数是[0,n]中范围的数,丢失的数可能是n或者是(0,n)中的数,那么如果丢失的是n,那么最后nums中的数与i异或最后得到的即是n;如果丢失的是(0,n)中的数,那么最后全部异或异或后就是丢失的数,因为res = nums.length;
利用for循环全部异或。
最后返回res的值即为丢失的数。