[每日一題] 151. 只出現一次的數字(位運算、異或、常規解法)

1. 題目來源

鏈接:只出現一次的數字

2. 題目說明

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

說明:

你的算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:
輸入: [2,2,1]
輸出: 1

示例 2:
輸入: [4,1,2,1,2]
輸出: 4

3. 題目解析

方法一:位運算+異或+常規解法

簡單異或位運算:

  • 異或具備交換律
  • 0 ^ n = n
  • n ^ n = 0

參見代碼如下:

// 執行用時 :8 ms, 在所有 C++ 提交中擊敗了98.78%的用戶
// 內存消耗 :13.3 MB, 在所有 C++ 提交中擊敗了5.10%的用戶

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int val = 0;
        for (int i = 0; i < nums.size(); ++i) val ^= nums[i];
        return val;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章