1. 程式人生 > >Leetcode 136. 只出現一次的數字

Leetcode 136. 只出現一次的數字

相同 ron 意思 p s 額外 按位異或 sin private 算法

1.題目描述

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

說明:

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

示例 1:

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

示例 2:

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

2.解法一:巧用“異或”操作

2.1 按位異或運算(^)

  • 按位異或運算將兩個運算分量的對應位按位遵照以下規則進行計算: 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
  • 即相應位的值相同的,結果為
    0,不相同的結果為 1。 例如,013^035結果為026(8進制)。
  • 異或運算的意思是求兩個運算分量相應位值是否相異,相異的為1,相同的為0(同0異1)
  • 按位異或運算的典型用法求一個位串信息的某幾位信息的反
  • 欲求整型變量j的最右4位信息的反,用邏輯異或運算017(8進制)^j,就能求得j最右4位的信息的反,即原來為1的位,結果是0,原來為0的位,結果是1。

2.2 示例代碼

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        //異或運算,同0異1
for(int a : nums){ result = result ^ a; } return result; } private: int result = 0; };

參考資料:

https://www.cnblogs.com/zfLee/p/9330127.html 只出現一次的數字 [ LeetCode ]

Leetcode 136. 只出現一次的數字