原文题目:
读题:
假设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; } };