給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1] 輸出: 1
示例 2:
輸入: [4,1,2,1,2] 輸出: 4
class
solution
for(
int j=
0;j}return single;
}}
不得不說這個解題手法真的是妙啊。首先回顧一下什麼是異或運算,簡單的說這是乙個位運算,兩個二進位制數各位的數字相同為0不同為1,如下:
1^1=0
0^0=0
1^0=1
0^1=1
異或運算滿足如下的運算法則:
1. a ^ b = b ^ a(交換律)
2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c(結合律)
看題目,題目中說乙個陣列,只有乙個元素出現一次,其餘元素均出現兩次,那麼我們可以通過上述運算法則來理解運算過程,假定有乙個陣列[4,1,2,1,2]
,我們可以通過交換律和結合律將其轉換成(1^1)^(2^2)^4=0^0^4=4
。
class
solution
return single;
}}
只出現一次的數字
1.乙個整型陣列,有乙個數字出現一次,其餘數字出現兩次,找出這個只出現一次的數字。解題思路 異或運算性質 兩個相同的數字異或得0,0與乙個數字異或得數字本身,而且異或運算是滿足交換律的 陣列元素按位異或,交換律可以想象成相同的數字參與運算的時候是相鄰的 所有出現兩次的數字異或之後得0,最後剩餘的是0...
只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4核心思想 對list排序,然後遍歷 class ...
只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素 例 1,2,2 1 方法一 異或 數字1 數字2 每一位如果相同就為0,不同為1 1 1 0 1 0 1 0 1 1 0 0 0 class solution def singlenumber se...