137 只出現一次的數字 II

2021-10-20 02:38:53 字數 1236 閱讀 8885

題目描述

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

說明:

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

示例 1:

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

輸出: 3

示例 2:

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

輸出: 99

題解:

法一:統計所有元素二進位制表示中每一位上1的個數之和,出現三次的元素,其累加後的1一定是3,否則的話,就屬於只出現一次的元素。

時間複雜度:o(32

∗n

)o(32 * n)

o(32∗n

) 額外空間複雜度:o(1

)o(1)

o(1)

class

solution

return ret;}}

;/*記憶體:9.2mb,擊敗:90.87%

*/

ps:這種解法也可以解決在其它數都出現 k 次的陣列中找到只出現一次的數版本問題。

法二:位運算。

出現奇數次的元素,其異或的結果不為零,但是需要區分一次三次

使用兩個掩碼onetwoone保留只出現一次的元素,不保留出現三次的元素。

定義以下運算規則:

one = ~two & (one ^ x)

two = ~one & (two ^ x);

從左往右遍歷nums,對於x

所以,出現三次的元素不會影響one,最終的one就是出現一次的元素。

class

solution

return one;}}

;/*記憶體:9.2mb,擊敗:96.52%

*/

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 題中我們用到了...

137 只出現一次的數字 II 詳解

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3 示例 2 輸入 0,1,0,1,0,1,99 輸出 99 與leetcode 136...