Missing Number(消失的数字)
【难度:Medium】
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3] return 2.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
给定一包含从0~n缺了一个数字的数组,使用线性的时间复杂度找到缺少的那个数字。
解题思路
本题利用数学知识来解答,这里介绍两种方法:
- 1)求出从0~n的累加和,减去数组整体的和,那么由于数组内每个数字不相同,其差就是缺少的那个数字;
- 2)利用异或运算,将数组全体内容与0~n进行异或,根据异或运算的性质可知最后结果为缺少的那个数字。
c++代码如下:
class Solution {
public:
int missingNumber(vector<int>& nums) {
if (nums.empty())
return 0;
int n = nums.size();
int sum = n*(n+1)/2;
int real_sum = 0;
for(int i = 0; i < n; i++) {
real_sum += nums[i];
}
return sum - real_sum;
}
};
class Solution {
public:
int missingNumber(vector<int>& nums) {
int res = 0;
for (int i = 1; i <= nums.size(); i++) {
res ^= i ^ nums[i-1];
}
return res;
}
};