丢失的数字
一、题目描述
给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。
提示:
n == nums.length
1 <= n <= 104
0 <= nums[i] <= n
nums
中的所有数字都 独一无二
二、题目解析
三、参考代码
// 登录 AlgoMooc 官网获取更多算法图解
// https://www.algomooc.com
// 作者:程序员吴师兄
class Solution {
public int missingNumber(int[] nums) {
// 定义变量 missing 为零
int missing = 0;
// 循环遍历 nums 中的每个数字
for(int i = 0 ; i < nums.length; i++){
// 将 nums 中的数字和 1 到 n 这这些数字全部进行异或
// 由于两个相同的数字进行异或的结果是 0
// 比如 5 ^ 5 = 0
// 又由于任何一个数和 0 进行异或还是它本身
// 比如 3 ^ 0 = 3
// 并且,题目中说明 nums 中的所有数字都独一无二
// 所以,最终 missing 就是那个只出现过一次的数字
missing = missing ^ nums[i] ^ (i + 1);
}
// missing 就是那个丢失的数字,返回就行
return missing;
}
}