1. 程式人生 > >【LeetCode 簡單題】57-存在重複元素

【LeetCode 簡單題】57-存在重複元素

宣告:

今天是第57道題。給定一個整數陣列,判斷是否存在重複元素。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一個整數陣列,判斷是否存在重複元素。如果任何值在陣列中出現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。

示例 1:

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

示例 2:

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

示例 3:

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

解法1。這道題最簡單最常規的想法就是用字典存放每個元素及其出現的頻數,然後通過遍歷頻數,如果遇到大於1的就返回True,遍歷完了還沒找到就返回False,耗時40 ms, 在Contains Duplicate的Python提交中擊敗了70.22% 的使用者,程式碼如下。

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        nums_dict = {}
        for num in nums:
            if num not in num_dict:
                nums_dict[num] = 1
            else:
                nums_dict[num] += 1

        for i in nums_dict.values():
            if i > 1:
                return True
        return False

 解法2:看了LeetCode上耗時最短的題,原來這道題考察的是set的用法,集合set自帶去重的作用,如果原數組裡有重複元素,那麼必然去重後長度會變短,按照這個邏輯一句話就搞定了,耗時36 ms, 在Contains Duplicate的Python提交中擊敗了89.33% 的使用者,程式碼如下。

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        return len(nums) == len(set(nums))

解法3。也可以選擇先把list排序,排完序若是有重複元素那麼必然相鄰,遍歷判斷是否有相鄰元素相等即可,44 ms, 在Contains Duplicate的Python提交中擊敗了52.16% 的使用者,程式碼如下。

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        nums.sort()    # 將nums排好序
        for i in range(1,len(nums)):
            if nums[i] == nums[i-1]:
                return True
        return False
        

結尾

解法1:原創

解法2 & 解法3:LeetCode

感覺LeetCode上的執行用時作為衡量演算法優劣不太靠譜啊……存在隨機性,有時好有時壞的