137 只出現一次的數字 II

2021-10-02 16:19:49 字數 1187 閱讀 1195

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。

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

示例 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 不變。

class

solution

return ones;}}

;

時間複雜度:o(n)

空間複雜度: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...