LeetCode刷题记录——第219题(存在重复元素II)

题目描述

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i i i j j j,使得 nums [i] = nums [j],并且 i i i j j j 的差的绝对值最大为 k。

示例 1:

输入: nums = [1,2,3,1], k = 3
输出: true

示例 2:

输入: nums = [1,0,1,1], k = 1
输出: true

示例 3:

输入: nums = [1,2,3,1,2,3], k = 2
输出: false

思路分析

  • 当 nums 长度小于2的时候,不可能存在着重复元素,返回False
  • 利用字典记录nums中出现的元素,key为具体的值,value为该值在nums中的索引位置
  • 例如[1,2,3,1,5,1] ;k = 2
    • nums[i]中储存的是值的信息。每一轮判断目前的nums[i]在不在字典d中,如果在,判断当前的索引位置和d中key所对应的value值的位置的差,满足则返回True;不满足的话,说明两者的距离超过了,那么就将key所对应的value值更新为最新的索引。(这一步更新很重要呀)
class Solution:
    def containsNearbyDuplicate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: bool
        """
        if len(nums) < 2:
            return False
        d = {}
        for i in range(len(nums)):
            if nums[i] in d and (i - d[nums[i]]) <=k:  # i - d[nums[i]]计算距离
                return True
            else:
                d[nums[i]] = i
        return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值