Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出的一组整数数组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
我们使用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记录如下:
时间复杂度:O(N),空间复杂度:O(N)
以上是本期内容,欢迎大佬们点赞评论,下期见~~