- 题目
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?
题目大意是:给一个n个数的数组,每个数组的数字是0,1,2…n中不重复的数字。找出缺失的那个数。 解题思路
思路1:
看到这题就想到了以前小学数学题中求1到n的和的问题,这题只要求出1到n的数的和,然后遍历以便数组,求数组中所有数字的和,然后用1到n的和,减去数组中数字的和,就是缺失的数字了。
思路2:
在讨论区谈到的,被深深的折服了。
a=a^b^b;而数组的数字是从0到n中的n个数,只需要将数字异或0-n中的每个数,并且异或数组中的每个数,最后出了数组中没出现的数,其他数字都被异或了两次,只剩下0-n中没出现的的那个数了。代码
//思路1
int missingNumber(vector<int>& nums)
{
int nSum = 0;
int nSize=nums.size();
for(int i=0;i<nSize ; ++i)
nSum+=nums[i];
return nSize*(nSize+1)/2 -nSum;
}
//思路2
int missingNumber(vector<int>& nums)
{
int i=0 ,nResult=0;
for( ; i<nums.size() ; ++i)
nResult = nResult^i^nums[i];
return nResult^i;
}