只出現一次的數字 II

2021-10-05 04:48:15 字數 847 閱讀 8369

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

輸入: [2,2,3,2]

輸出: 3

輸入: [0,1,0,1,0,1,99]

輸出: 99

(大佬的思路,日後可以用來回顧)

如果能設計乙個狀態轉換電路,使得乙個數出現3次時能自動抵消為0,最後剩下的就是只出現1次的數。

開始設計:乙個二進位制位只能表示0或者1。也就是天生可以記錄乙個數出現了一次還是兩次。

要記錄出現3次,需要兩個二進位制位。那麼上面單獨的x就不行了。我們需要兩個變數,每個變數取一位:

這裡,a、b都是32位的變數。我們使用a的第k位與b的第k位組合起來的兩位二進位制,表示當前位出現了幾次。也就是,乙個8位的二進位制x就變成了16位來表示。

於是,就有了這一幕…

它是乙個邏輯電路,a、b變數中,相同位置上,分別取出一位,負責完成 00->01->10->00,也就是開頭的那句話,當數字出現3次時置零。

int

singlenumber

(vector<

int>

& nums)

return a;

}

還有乙個**也很有意思,但是沒看懂

class

solution

return res;}}

;//分別統計32位上1的個數tmp,然後對tmp進行對3求餘,就能將出現三次的數去掉。最後通過 tmp<

只出現一次的數字 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 使用python3,用了額外的空...

137 只出現一次的數字 II

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 示例 2 1.二進位制下不考慮進製的加法 本題為 136.single number 的拓展,136 題中我們用到了...