Leetcode 只出現一次的數字(c++)
阿新 • • 發佈:2018-11-22
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
(1)首先想到用count統計,通過了,但耗時超高
class Solution {
public:
int singleNumber(vector<int>& nums) {
for (int i=0;i<nums.size();++i)
{
if (count(nums.begin(),nums.end(),nums[i]) != 2)
return nums[i];
}
}
};
(2)用異或^操作實現
兩數相同為0,不同為1
一個數與自己異或會變成0
異或滿足結合律 如 5^2 ^3 ^2 = 2 ^ 2 ^ 5 ^3
任何數和0異或不變
所以,將所有數字異或,如果一個數字出現兩次相當於沒有出現,
最後剩下的數就是隻出現一次的數字
class Solution {
public:
int singleNumber(vector<int>& nums) {
int temp=0;
for (int i=0;i<nums.size();++i)
{
temp ^= nums[i];
}
return temp;
}
};