LeetCode 136 只出現一次的數字

2022-03-16 23:33:01 字數 1231 閱讀 8213

看到今天的「每日一題」,第一時間發現用位運算很簡單、快速。

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

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

示例 1:

輸入: [2,2,1]

輸出: 1

示例 2:

輸入: [4,1,2,1,2]

輸出: 4

首先,來看個例子,比如:a^b

假設,a、b的值分別是15、2,

a 的值是15,轉換成二進位制為 1111,

b 的值是2,轉換成二進位制為 0010,

這下可以根據異或的運算規律,可以得出其結果為 1101,即13。

1 1 1 1

⊕  0 0 1 0

————————————

1 1 0 1

繼續看看,我們可以來看看⊕的運算性質:

繼續看這道題,輸入的陣列一定是奇數個,

現在我假設一共有 2m+1 個元素,

其中,m對元素是成對出現的,唯一1個元素就是將被輸出的結果。

接下來可以根據這個假設,列出這個表示式,

(a1⊕a2⊕⋯⊕am)⊕(a1⊕a2⊕⋯⊕am)⊕am+1

⇨ (a1​⊕a1​)⊕(a2​⊕a2​)⊕⋯⊕(am​⊕am​)⊕am+1​

⇨ 0⊕0⊕⋯⊕0⊕am+1​

⇨ am+1​

下面的**就是採用按位異或操作符來完成的。

成功提交後,我看了其他其他題解,大部分都是使用異或運算來完成。

但是,還有一些是使用雜湊表來完成的。

對哦,為什麼我不用 hash 表呢?

因為我還不會 hash 表啊hhh

好吧,不會歸不會,但也得學學。

這裡就直接小本本上記錄兩個使用hash來實現的演算法:

利用 hash 表,time: o(n),space: o(n)

解決方案:雜湊集(hashset)

leetcode 136 只出現一次的數字

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

Leetcode 136 只出現一次的數字

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

LeetCode 136 只出現一次的數字

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