天天看點

LeetCode015 :存在重複元素

LeetCode015 :存在重複元素

一、寫在前面

LeetCode 第十四題反轉字元串傳輸門:LeetCode014 : 除自身以外數組的乘積

今天給大家分享的是LeetCode 數組與字元串 第十五題: 存在重複元素,為面試而生,期待你的加入。

“Use the utility in the API is recommended in the project. But if you use it in an interview, you will definitely fail .”

二、今日題目

給定一個整數數組,判斷是否存在重複元素。

如果任何值在數組中出現至少兩次,函數傳回 true。

如果數組中每個元素都不相同,則傳回 false。

示例:

輸入: [1,2,3,1]
輸出: true

輸入: [1,2,3,4]
輸出: false

輸入: [1,1,1,3,3,4,3,2,4,2]
輸出: true
           

三、 分析

這個題目,有點簡單,根據題目可以得出很清晰的思路,一個清單,所有元素,有沒有兩個一樣的元素,有就傳回True,沒有就傳回False,我第一個腦子就是:把list轉換成set,學過Python基礎或者看過我總結的Python小知識的讀者都知道,set集合是沒有重複元素的清單,這樣就簡單了,直接比較set和list長度就好了,長度一樣,說明沒有重複元素,否者有,思路如下:

LeetCode015 :存在重複元素

四、解題

1. 第一眼想到的:

表面上看,時間複雜度:O(1)

空間複雜度,多用了一個set:O(n)

(1)代碼

# 第一眼想到的
class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        # 轉換為集合(set)
        set_test = set(nums)
        # 比較集合與原清單長度
        if len(set_test) == len(nums):
            return False
        return True
           

(2)送出結果

LeetCode015 :存在重複元素

測試資料:18組

運作時間:36ms

擊敗人百分比:87.52%

2.使用collection的Counter類

表面上看,好像也是,時間複雜度:O(1)

空間複雜度,多用了一個dict:O(n)

(1)代碼

# 使用collection的Counter類
class Solution1(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if nums == []:
            return False
        from collections import Counter
        # 計數,Counter函數傳回值為字典
        # key : vaule = 清單元素 : 出現次數
        con = Counter(nums)
        if max(con.values()) > 1:
            return True
        return False
           

(2)送出結果

LeetCode015 :存在重複元素

測試資料:18組

運作時間:56ms

擊敗人百分比:18.52%

3.自己動手

時間複雜度:O(n)

空間複雜度:O(1)

(1)代碼

# 老實本分
class Solution2(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if nums == []:
            return False
        # 1.周遊清單
        for i in nums:
	        # 2.移除目前周遊元素
            nums.remove(i)
	        # 3.判斷還有沒有該元素在list中
            if i in nums:
               return True
        return False
           

(2)運作結果

LeetCode015 :存在重複元素

五、疑惑

像這種簡單題目,就要多想幾種方法,把學到的都用上,鞏固知識,這樣才能學到更多東西,而不是,好簡單啊,打會遊戲去吧!

推薦極客時間一門算法學習課程,我利用平時吃飯時間現在學習到20講了,視訊課程,學起來更加容易,需要的同學現在掃碼購買優惠30元,明天就恢複原價了。

LeetCode015 :存在重複元素

思想很複雜,

實作很有趣,

隻要不放棄,

終有成名日。

—《老表打油詩》

六、結語

加我微信:zs820553471,備注:leetcode,加入專門的leetcode刷題交流群。

堅持 and 努力 : 終有所獲。

歡迎大家關注微信公衆号:極簡XksA,擷取Python/Java/前端等學習資源!

LeetCode015 :存在重複元素