美文网首页
【Leetcode初级算法】4-存在重复

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

作者: 小流 | 来源:发表于2018-07-19 01:23 被阅读14次
    • 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 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-存在重复

          本文链接:https://www.haomeiwen.com/subject/rmkzpftx.html