Leetcode 136. 只出現一次的數字
阿新 • • 發佈:2019-03-01
相同 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
- 即相應位的值相同的,結果為
- 異或運算的意思是求兩個運算分量相應位值是否相異,相異的為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異1for(int a : nums){ result = result ^ a; } return result; } private: int result = 0; };
參考資料:
https://www.cnblogs.com/zfLee/p/9330127.html 只出現一次的數字 [ LeetCode ]
Leetcode 136. 只出現一次的數字