1. 程式人生 > >Leetcode 只出現一次的數字(c++)

Leetcode 只出現一次的數字(c++)

給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

(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; } };