[LeetCode]268. Missing Number 用異或處理
阿新 • • 發佈:2018-12-24
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'; }