給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
示例 2:
1.二進位制下不考慮進製的加法:本題為 136. single number 的拓展,136 題中我們用到了異或運算。實際上,異或運算的含義是二進位制下不考慮進製的加法,即:0 xor 0=0+0=0xor0=0+0=0, 0 xor 1=0+1=0xor1=0+1=1, 1 xor 0=1+0=1xor0=1+0=1, 1 xor 1=1+1=1xor1=1+1=0(不進製)。
2.三進製下不考慮進製的加法:通過定義某種運算 #,使得 0 # 1 = 1,1 # 1 = 2,2 # 1 = 0。在此運算規則下,出現了 3 次的數字的二進位制所有位全部抵消為 0,而留下只出現 1 次的數字二進位制對應位為 1。因此,在此運算規則下將整個 arr 中數字遍歷加和,留下來的結果則為只出現 1 次的數字。
3.以上過程本質上是通過構建 3 個變數的狀態轉換表來表示對應位的出現次數:使所有數字「相加」後出現 3n+1次的位 ones = 1,出現 3n,3n+2 次的位為 ones = 0。
**分析:
ones = ones ^ num & ~twos:
(1)當 num = 1 時,只當 ones = twos = 0時將 ones 置 1,代表出現 3n+1次;其餘置 0,根據 twos值分別代表出現 3n 次和 3n+2次;
(2)當 num = 0時,ones 不變;
twos = twos ^ num & ~ones:
(1)當 num = 1 時,只當 ones = twos = 0時將 twos 置 1,代表出現 3n+2 次;其餘置 0,根據 ones值分別代表出現 3n次和 3n+1 次。
(2)當 num = 0 時,twos 不變。
時間複雜度:o(n)class
solution
return ones;}}
;
空間複雜度:o(1)
137 只出現一次的數字 II
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3 示例 2 輸入 0,1,0,1,0,1,99 輸出 99 使用python3,用了額外的空...
137 只出現一次的數字 II
題目描述 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3示例 2 輸入 0,1,0,1,0,1,99 輸出 99題解 法一 統計所有...
137 只出現一次的數字 II 詳解
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3 示例 2 輸入 0,1,0,1,0,1,99 輸出 99 與leetcode 136...