【leetcode 217】【存在重复元素】

leetcode 217 存在重复元素


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

示例:

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


解题思路:

一共有三种方法,分别是字典法,排序法和set集合法。

字典法

遍历列表,把元素依次放入字典中,数值作为key。在前面添加一个判断元素是否在字典内,如果是则返回True,若遍历完列表还是没有返回,则返回False。

排序法

对列表排序,循环列表,根据下标判断 nums[i] == nums[i+1],如果有就返回true,否则false

集合法

直接判断列表长度与被转成集合的列表的长度是否相等,如果相等,则返回false,不相等返回true


代码思路:

需要注意添加判空条件。列表的排序只能用sorted()


代码:

字典法
if len(nums) == 0:
    return False
new_dict = dict()
for i,j in enumerate(nums):
    if j in new_dict:
        return True
    new_dict[j] = i
return False
排序法
if len(nums) == 0:
    return False
nums = sorted(nums)
for i in range(len(nums)-1):
    if nums[i] == nums[i+1]:
        return True
return False
集合法
if len(nums) == 0:
    return False
return not len(nums) == len(set(nums))

复 杂 度 分 析 : \color{red}{复杂度分析:}

字典法需要遍历列表,所以时间复杂度为O(N),字典法需要存储N个元素,所以是O(N)。
排序法的时间复杂度为O(NlogN),这是排序的最快速度,空间复杂度为O(1)
集合法的时间复杂度为O(N),因为转换set需要遍历一次,空间复杂度是O(N),也是因为set的存储空间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值