LeetCode刷題 136只出現一次的數字

2021-10-20 22:14:45 字數 1559 閱讀 2505

這道題來自於leetcode官方編輯的初級演算法裡面陣列這一類別的題目,這道題目很簡單,本來不打算記錄的,但是這道題的解法我感覺還是挺有意思的,於是還是打算稍微記錄一下,加深印象,以便日後遇到這樣的題目可以想到類似方法。

在看這道題之前,先看一下另一道類似的題目:存在重複元素

這道題要求我們判斷陣列中是否存在重複元素,存在返回true,不存在返回false。最直接的想法就是直接把陣列排序,然後掃瞄陣列,對比前後兩個元素是否一致。如果遍歷結束都沒有兩個一樣的數,那說明陣列不存在重複元素。

另外有一種簡單的方法就是把陣列元素插入到雜湊表,如果每個元素都能成功插入說明每個元素都是獨一無二的,陣列無重複元素。反之說明有重複元素。

現在來看一下下面這個題目吧。

題目很好理解,那麼先看一下我自己的思路是什麼樣的吧。

我的解法還是跟上一題思路一樣,先把陣列排序,然後兩個一組判斷是否相同,不同的話就返回不同的值。

class

solution

:def

singlenumber

(self, nums: list[

int])-

>

int:

nums.sort(

) i=

1while

(i<

len(nums)):

if nums[i-1]

!= nums[i]

:return nums[i-1]

else

: i = i+

2return nums[i-

1]

這裡有個特殊情況就是如果只出現一次的數是最大的數,那麼最後面就無法判斷到,所以就直接返回最後乙個數。

位運算在這樣的題目中一般可以起到很好的作用,能夠提高執行效率。這裡用到的是異或運算。異或運算,相同返回假,不同返回真。而且異或運算具有可交換性,交換運算順序不影響最後結果。所以直接把陣列中所有元素進行一次異或,有相同元素的全部都變為0,剩下的就是只出現一次的元素了。

class

solution

:def

singlenumber

(self, nums: list[

int])-

>

int:

return

reduce

(lambda x, y: x ^ y, nums)

這裡介紹的兩道題都很簡單,如果要硬做也很快就能得到結果。但是這裡用到的雜湊表方法和位運算方法我覺得都挺有啟發性。應該重視這兩種方法的應用。

LeetCode刷題 136 只出現一次的數字

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

LeetCode演算法題136 只出現一次的數字解析

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例1 輸入 2,2,1 輸出 1示例2 輸入 4,1,2,1,2 輸出 4這個題首先可以想到使用棧,因為之前括號匹配題和這個相...

LeetCode 第136題 只出現一次的數

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