Leetcode 136. Single Number(位運算、異或運算

描述
給定一個數組,只有一個數字重複一次,其他數字重複兩次,找出重複一次的數字。

Solution 1
用到異或(^)的幾個性質:

順序無關:即滿足交換律。
同一個數異或兩次等於沒有異或:如4 ^ 3 ^ 4 = 3。
一個數與0異或的結果爲其本身:如3 ^ 0 = 3。
result初始值爲0,將數組中每個元素都與result作異或並更新result,最終result的值就是那個唯一隻出現一次的元素了。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res;
        for(int i=0;i<nums.size();i++)
            res ^= nums[i];
        return res;
    }
};


Solution 2
也可以使用single number 2的思路。將3改成2即可。

class Solution
{
  public:
    int singleNumber(vector<int> &nums)
    {
        int res = 0;
        for (int i = 0; i < 32; i++) //遍歷每一個數字的每一位數字
        {
            int sum = 0;
            for (int j = 0; j < nums.size(); j++) //遍歷數組中每一個數字
            {
                //將數字第i位取出來,累計到sum中
                sum = sum + ((nums[j] >> i) & 1);
            }
            // 如果某一位出現2次則模3後會成爲0
            sum %= 2;
            // 將模2後的第i位填充到res中
            res = res | (sum << i);
        }
        return res;
    }
};
————————————————
版權聲明:本文爲CSDN博主「sunlanchang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sunlanchang/article/details/86776646

發佈了234 篇原創文章 · 獲贊 63 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章