题意:
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?
难度:Medium
解题思路:
因为目标数组包含了0,1,2……n,而当前数组缺少了刚好一个元素。这就意味着目标序列所有元素的和和当前数组所有元素之和的差值就是这个缺少的元素。比如目标数组为{0,1,2,3,4},当前数组为{0,1,3,4},比较一下两组数组,缺少的那个元素就等于两组元素之和的差。 这样只需要用等差数列求和公式求出目标数组的所有元素之和 target=n*(n+1)/2, 再遍历一次当前数组,求出所有元素之和sum,返回target-sum即可。不需要另外开数组,减少了内存的开销。时间复杂度为O(n)
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n=nums.size();
int target=0;
target=n*(n+1)/2;
int sum=0;
for(int i = 0;i<nums.size();i++)
{
sum+=nums[i];
}
return target-sum;
}
};