力扣每日一题(三十五——存在重复的元素)

仅以此纪录每日LeetCode所刷题目

题目描述:

示例:

思路:

今天的思路比较清晰,但是时间复杂度和空间复杂度都不是很理想。题目给定了一个k值,我们需要判断nums列表中存不存在两个相同的数之间的距离小于k值, 遇到有关查找的问题,我们首先想到用哈希表来解决。建立哈希表,key值存储数字,value存储相同数字的下标值。存储完毕之后我们来遍历value值,我们首先判断每个value对应的长度,如果所有的value值都为1,也就是没有重复的数字,那我们直接返回False即可。正常情况下我们遍历每个value值,value值在存储的时候就已经排好序了,我们可以直接求出两个相邻数字之间的范围,当我们直到小于k的范围时,直接返回True即可。遍历完成没有发现小于k的,我们返回False即可。

代码:

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        dict1 = {}
        for i in range(len(nums)):
            if nums[i] in dict1:
                dict1[nums[i]].append(i)
            else:
                dict1[nums[i]] = [i]
        for i in dict1.values():
            if len(i) == 1:
                next
            else:
                for j in range(1,len(i)):
                    if i[j] - i[j-1] <= k:
                        return True
        return False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值