給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
通過異或運算(兩者相等為0,不等為1.)
1^1=0
0^0=0
1^0=1
0^1=1
1.交換律:a ^ b ^ c <=> a ^ c ^ b
2.任何數於0異或為任何數 0 ^ n => n
3.相同的數異或為0: n ^ n => 0
如: 2 的二進位制為 : 0010
1 的二進位制為 : 0001
4 的二進位制為 : 0100
例項1中:逐步預算
2^2 = 0000 = 0
1^0 = 0001 = 1
等價為 : 2^2^1 = 0^1 = 1
例項2中:逐步運算
4^1 => 0100 ^ 0001 => 0101 = 5
5^2 => 0101 ^ 0010 => 0111 = 7
7^1 => 0111 ^ 0001 => 0110 = 6
6^2 => 0110 ^ 0010 => 0100 = 4
等價為 : 4^1^2^1^2 => 4^1^1^2^2 => 4^(1^1)^(2^2) => 4^0^0 = 4(相同的數異或為0: n ^ n => 0)
衍生出的面試題:
int a = 10,b=20;交換兩個數的值:
常規寫法:
int temp = 0;
temp = a;
a = b;
b = temp;
那麼不定義第三方變數,交換兩個數的值:
a=a+b;
b=a-b;
a=a-b; //可能會存在a+b的值超過型別的大小,所以要謹慎。
接下來的就是使用異或:
a=a^b;
b=a^b;
a=a^b;
逐步運算
a = a ^ b;
b = a ^ b = (a ^ b) ^ b = a ;
a = a ^ b = (a ^ b) ^ (a ^ b) ^ b = b;
LeetCode刷題 136只出現一次的數字
這道題來自於leetcode官方編輯的初級演算法裡面陣列這一類別的題目,這道題目很簡單,本來不打算記錄的,但是這道題的解法我感覺還是挺有意思的,於是還是打算稍微記錄一下,加深印象,以便日後遇到這樣的題目可以想到類似方法。在看這道題之前,先看一下另一道類似的題目 存在重複元素 這道題要求我們判斷陣列中...
LeetCode演算法題136 只出現一次的數字解析
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例1 輸入 2,2,1 輸出 1示例2 輸入 4,1,2,1,2 輸出 4這個題首先可以想到使用棧,因為之前括號匹配題和這個相...
LeetCode 第136題 只出現一次的數
題目 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 package leetcode 20...