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

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