【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上的执行用时作为衡量算法优劣不太靠谱啊……存在随机性,有时好有时坏的

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/83409487