xqn2017

导航

268. Missing Number

原文题目:

268. Missing Number

读题:

假设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;
	}
};

  

posted on 2018-01-26 20:27  xqn2017  阅读(107)  评论(0编辑  收藏  举报