1. 程式人生 > >[LeetCode]268. Missing Number 用異或處理

[LeetCode]268. Missing Number 用異或處理

Subscribe to see which companies asked this question

方法一:用空間換時間

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int missingNumber(vector<int>& nums) {
        int len=nums.size(),i=0;
        int *a=new int[len];
        memset(a,0,len*sizeof(int));
		for(i=0;i<len;i++) 
			a[nums[i]]=1;
		for(i=0;i<len;i++) 
			if(a[i]==0)
				break;
		return i;
    }
int main()
{
	vector<int> numbers;
	numbers.push_back(1);
	numbers.push_back(3);
	numbers.push_back(0);

		cout<<missingNumber(numbers)<<'\0';
}
方法二:用異或處理,將陣列中資料和0到n異或,因為兩個相同的數異或為0,所以剩下的數一定為那個未出現的數
<pre name="code" class="html">#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int missingNumber(vector<int>& nums) {
        int len=nums.size(),n=0;
<span style="white-space:pre">		</span>for(int i=0;i<len;i++) 
<span style="white-space:pre">			</span>n=n^(i+1)^nums[i];
<span style="white-space:pre">		</span>return n;
    }
int main()
{
<span style="white-space:pre">	</span>vector<int> numbers;
<span style="white-space:pre">	</span>numbers.push_back(1);
<span style="white-space:pre">	</span>numbers.push_back(3);
<span style="white-space:pre">	</span>numbers.push_back(0);


<span style="white-space:pre">		</span>cout<<missingNumber(numbers)<<'\0';
}