看到今天的「每日一題」,第一時間發現用位運算很簡單、快速。
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]示例 2:輸出: 1
輸入: [4,1,2,1,2]首先,來看個例子,比如:a^b輸出: 4
假設,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 使用集合中沒有重複元素...