268.Missing Number的题目大意为:
给出一个数组,包含n个数(取自0~n之间),让你找出缺少了哪个数.
1.求和法
0, 1, 2, …, n这n+1个数的和我们可以求出, 减去给出的n个数之和, 差值就是缺少的那个数.
需要注意注意一点, 直接求和如果数值过大可能会overflow, 所以要边加边减.
C++代码: github1
2
3
4
5
6
7
8
9
10
11
12class Solution {
public:
int missingNumber(vector<int>& nums) {
int ret = nums.size();
for(int i = 0;i < nums.size();i++)
{
ret -= nums[i];
ret += i;
}
return ret;
}
};
2.位操作
我们已经知道了0~n这n+1个数, 又知道了给出的n个数. 所以缺失的数只出现了一次, 其他数字出现了两次.
xor 运算有以下的性质:
x^x = 0
0^x = x
所以, 将所有的数做异或运算, 运算的结果即为缺失的数.
C++代码: github1
2
3
4
5
6
7
8
9
10
11
12class Solution {
public:
int missingNumber(vector<int>& nums) {
int ret = nums.size();
for(int i = 0;i < nums.size();i++)
{
ret ^= nums[i];
ret ^= i;
}
return ret;
}
};