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

2021-09-10 21:56:52 字數 1319 閱讀 1951

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

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

示例 1:

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

輸出: 3

示例 2:

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

輸出: 99

與leetcode 136 不同的是,136是 2n+1, 可以直接異或,而這題是3n+1 .既然是3n+1 的思路,用 set 去重之後,*3 減去 不去重直接sum 就是重複之數的兩倍 ,對應解法一,o(n) ,但是set 用到了額外空間,所以這並不是最符合題目要求的解法。

def

singlenumber

(self, nums)

:"""

:type nums: list[int]

:rtype: int

"""r =(3

*sum

(set

(nums))-

sum(nums))//

2return r

如上所說,3n+12n+1的區別在於a ^ a可以直接抵消,而a ^ a ^a不能直接抵消,如果找到3數抵消的運算方式就可以解決問題。

拿測試用例:[2,2,3,2]推演,過程如下,最終返回a值,即為重複值。

時間複雜度為o(n) 。

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題解 法一 統計所有...