【Leetcode初级算法】4-存在重复

  • 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false

  • 思路:
    最简单的想法,第一个与后面所有其他元素比较是否相等,没有的话第二个,第三个……暴力破解法。
    这样循环嵌套两次就做出来了,但是时间复杂度就到了O(n*n),一提交第5个case就超时了。

  • 我第二个思考的方法就是先排序再去做比较,这样比较只要比两两相邻的数,因为相等肯定相邻。所以比较只要一次循环就能做完,复杂度高低取决于排序算法。
    我自己没有去写排序(选也只能选合并排序),而是调用了Python内置sort方法,查了资料这个排序算法选择了TimeSort,是一种复杂度平均只有O(n*log(n))的高级算法。
    原理可以参考: https://blog.csdn.net/yangzhongblog/article/details/8184707
    我这里偷了个懒所以没什么价值。凑合看:

  • 附上Python代码:

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if len(nums) == 0 or len(nums) == 1:
            return False
        nums.sort()
        i = 0
        j = 1
        while j < len(nums):
            if nums[i] == nums[j]:
                return True
            i += 1
            j += 1
        return False
  • 另有一种解法说可以用哈希表来做,后续再试试补充。

你可能感兴趣的:(【Leetcode初级算法】4-存在重复)