给出一个包含 0, 1, 2, ..., n
中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
/**
* Created by Joe on 2018/4/7.
* 268. Missing Number
* https://leetcode.com/problems/missing-number/description/
*/
public class P268 {
public int missingNumber(int[] nums) {
int sum = 0;
for(int num: nums)
sum += num;
return (nums.length * (nums.length + 1) )/ 2 - sum;
}
}
因为假定的是一个连续的序列找缺失数字,所以相当于等差数列求和再减去所给的所有数就是所得。
但是这个方法还是比较笨重,而且有数据溢出的风险,评论区有一个位操作的方法很好。
public int missingNumber(int[] nums) {
int xor = 0, i = 0;
for (i = 0; i < nums.length; i++) {
xor = xor ^ i ^ nums[i];
}
return xor ^ i;
}
其主要思路是异或操作,异或操作a^b^b =a
,如果有两个相同的数字进行了^
操作,这个数字就会被抵消。