LSGO——LeetCode實戰(數組系列):217題 存在重複元素(Contains Duplicate)

數組系列

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

如果任何值在數組中出現至少兩次,函數返回 true。如果數組中每個元素都不相同,則返回 false。

方法一:

對於數組類的問題,其中像這種針對元素的問題,我們首先第一步想的是排序,因爲排完序之後的數組,其元素有一定的規律性,對我們解決問題會有一定的幫助性,所以排序是一個很好的預處理方法。這只是一個我的一個思路。

第一步:我們對數組進行排序,這裏我直接使用了sort()內置函數,實際上,我們也可以使用希爾排序,冒泡排序,選擇排序,插入排序,快速排序,但是這些方法在數據量很大時在LeetCode裏運行是會超時的。

 

第二步:排完序的數組,如果有重複的元素,元素必然是相鄰的。

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        nums.sort()  # sort()是python內置函數,可以對數組進行排序
        for i in range(len(nums)-1):    
            if nums[i] == nums[i+1]:
                return True
        return False

冒泡排序:

 for i in range(len(nums)-1):
            for j in range(len(nums)-i-1):
                if nums[j] >nums[j+1]:
                    nums[j],nums[j+1] = nums[j+1],nums[j]

運行時間超過時間限制。

九大排序,以後有機會統一學習一下。

方法二(超時):

直接暴力法, 運用兩次遍歷,尋找相同元素。很明顯會超時。

做到這裏,我們發現在LeetCode裏面關於數組方面一旦使用兩次遍歷是肯定超時的。

有人會問,爲什麼python自帶的sort函數不會超時?下面這個鏈接或許可以給你答案。

https://blog.csdn.net/sinat_35678407/article/details/82974174

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章