版权声明:此BLOG为个人BLOG,内容均来自原创及互连网转载。最终目的为记录自己需要的内容或自己的学习感悟,不涉及商业用途,转载请附上原博客。 https://blog.csdn.net/bulo1025/article/details/85340835
题目描述
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 和 ,使得 nums [i] = nums [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