📅  最后修改于: 2023-12-03 15:28:44.027000             🧑  作者: Mango
给定一个整数数组nums和一个整数k,请判断是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且i和j之间的差的绝对值不超过k。
def contains_nearby_duplicate(nums, k) -> bool:
输入:
nums = [1,2,3,1], k = 3
输出:
True
说明:在位置0和位置3处都有数字1。
定义一个字典 dic
,表示每个元素最后出现的位置。遍历数组,如果当前位置记为 i
,若nums[i]
已经在 dic
中出现过,判断上一次出现的位置记为 j
是否满足 i - j <=k
, 如果满足就返回 True
,否则更新dic[nums[i]] = i
。
def contains_nearby_duplicate(nums, k) -> bool:
dic = {}
for i in range(len(nums)):
if nums[i] in dic and i - dic[nums[i]] <= k:
return True
dic[nums[i]] = i
return False
时间复杂度:O(n),其中n为数组的长度。
空间复杂度:O(min(n,k)),其中k为题目中给定的距离,因为只要字典中的元素数量不超过k+1,就不会造成溢出。在最坏情况下,即nums中的k个元素均不相同,所以最后得到的字典的长度为min(n,k)。