【LeetCode】217. 存在重复元素

76 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题给出的一组整数数组nums
    • 要求判断整数数组中元素是否出现重复的
    • 如果重复的,则返回True;否则返回False

二、思路分析:

我们拿到本题,脑袋不像昨天束手无策啦,心里暗想我会这道题。使用列表的分片暴力求解。

  • 首先使用for循环进行遍历数组中元素
  • 判断取出的元素与列表剩余的元素是否存在

齐刷刷的一股脑,写下如下代码。点击提交,跑到69个case,居然超过时间限制

for i in range(len(nums)):

    if nums[i] in nums[i+1::]:
           return True
 return False

提交的代码,通过不了。哪我们只能再动动小脑袋了。

  • 对整数数组进行排序,然后再进行遍历判断

重新修改代码,仍然超时啦。哪我们重新另辟蹊径吧,使用栈的思想。

  • 借助一个临时列表tmp,来存储不重复的值
  • 当遍历的元素,不存在tmp列表中,tmp.append()添加
  • 当遍历的元素,在tmp列表中存在时,则直接返回True

image.png

我们使用python 代码实现如上思路:

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """

        tmp = []

        for back in range(len(nums)):

            if nums[back] in tmp:

                return True
                
            tmp.append(nums[back])

        return False     

实现本题,我们还可以直接使用集合特性来判断。

  • 将nums数组转换成集合,去掉重复的元素
  • 然后进行判断tmpset和nums的长度,就可以轻松解决
tmpset = set(nums)

if len(tmpset) == len(nums):
        return False

return True

三、总结:

我们借助临时列表来存储已遍历的元素,AC记录如下:

image.png

时间复杂度:O(N),空间复杂度:O(N)

以上是本期内容,欢迎大佬们点赞评论,下期见~~