136. 只出現(xiàn)一次的數(shù)字(easy)

給定一個(gè)非空整數(shù)數(shù)組,除了某個(gè)元素只出現(xiàn)一次以外,其余每個(gè)元素均出現(xiàn)兩次。找出那個(gè)只出現(xiàn)了一次的元素。
說(shuō)明:
你的算法應(yīng)該具有線性時(shí)間復(fù)雜度。 你可以不使用額外空間來(lái)實(shí)現(xiàn)嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4

  • show the code:
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        a = 0
        for i in nums:
            a ^= i
        return a
  • 此題可以聯(lián)想到很多方法,其中有暴力法:兩次遍歷,尋找只出現(xiàn)過(guò)一次的數(shù),復(fù)雜度為O(n^2)
  • 有哈希法,維護(hù)一個(gè)字典存儲(chǔ)之前出現(xiàn)過(guò)的數(shù)字,直到找出之前沒(méi)出現(xiàn)過(guò)的數(shù)字:即只出現(xiàn)一次的數(shù)字。時(shí)間和空間復(fù)雜度都為O(n)
  • 但是題目要求線性時(shí)間復(fù)雜度而且不使用額外空間,所以以上兩種方法都不能AC,答案有一種位運(yùn)算的方法,即異或^,此符號(hào)表示兩個(gè)數(shù)字二進(jìn)制每位數(shù)相同的則為0,不同則為1,所以馬上推出兩個(gè)相同的數(shù)字異或的結(jié)果是0,0與任何數(shù)字異或的結(jié)果都是那個(gè)數(shù)字自身,所以我們只需要遍歷一遍即可得出結(jié)果。非常簡(jiǎn)單,也非常牛逼。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容