题目
给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
解题思路
对 [0, n]
的所有数求和,再对 nums
所有数求和,最后再相减就是丢失的数。看了官方题解,还有一个比较有意思的解法是利用异或运算, x ^ x = 0
且 x ^ 0 = x
。那就把 [0, n]
所有的数与 nums
所有的数,共计 2n + 1
个数同时做异或运算,最后得到的结果就是缺失的那个数。
代码
class Solution {
public int missingNumber(int[] nums) {
int sum = 0;
for (int num : nums) {
sum += num;
}
return nums.length * (nums.length + 1) / 2 - sum;
}
}
class Solution {
public int missingNumber(int[] nums) {
int ans = 0;
for (int num : nums) {
ans = ans ^ num;
}
for (int i = 0; i <= nums.length; i++) {
ans = ans ^ i;
}
return ans;
}
}