原文题目:
读题:
假设0-n是连续的数字序列,求给定的序列中缺失的数据,比如0,1,3就缺失了2,才能组成连续序列0,1,2,3
解题:
1)采用异或的思想,2^2=0,3^3=0,因此将原序列0,1,3分别与标准序列0,1,2,3做异或操作,则可以得出缺失的数据,前提是只有一个数据缺失,题目返回是Int是一个值,并不是vector数组,因此可以用
2)初始化一个数组大小为n,值都为1,作为标志位,表示0-n的标志,然后遍历给定的数组,如果遇到1,则temp[1]--变为了0,如果遍历下来值temp[j]还是1,说明该值j就是缺失的值。
class Solution {
public:
int missingNumber(vector<int>& nums)
{
int n = nums.size();
int i=0;
int result =nums[0];
for(i=1;i<n;i++)
{
result ^= nums[i];
}
for(i=0;i<n+1;i++)
{
result ^= i;
}
return result;
}
};
int main()
{
Solution s;
int result;
vector <int> vec;
vec.push_back(3);
vec.push_back(0);
vec.push_back(1);
vec.push_back(2);
vec.push_back(5);
result = s.missingNumber(vec);
cout << result << endl;
getchar();
}
方法二:
class Solution {
public:
int missingNumber(vector<int>& nums)
{
int i =0;
int j =0;
int len = nums.size();
int result =0;
vector <int> temp(len+1,1);
for(;i < len;i++)
{
temp[nums[i]]--;
}
for(;j<len+1;j++)
{
if(1 == temp[j])
{
result = j;
}
}
return result;
}
};