📅  最后修改于: 2023-12-03 15:28:13.453000             🧑  作者: Mango
给定一个长度为 $n$ 的整型数组 $nums$ 和一个整数 $k$,请编写一个函数来查找该数组中是否存在两个不同的索引 $i$ 和 $j$,使得 $nums[i] = nums[j]$,并且 $|i - j| \leq k$。
def contains_nearby_duplicate(nums: List[int], k: int) -> bool:
pass
nums
整型列表,长度 $n$,$(1 \leq n \leq 10^5)$;k
整数 $(0 \leq k \leq 10^4)$。布尔值,表示是否存在满足条件的两个索引。
输入:
nums = [1, 2, 3, 1]
k = 3
输出:True
解释:nums[0]=nums[3]=1,且|i-j|=3。
输入:
nums = [1, 0, 1, 1]
k = 1
输出:True
解释:nums[0]=nums[2],且|i-j|=2。(nums[1]=0与nums[2]=1相同,但不符合|i-j|\leq k。)
输入:
nums = [1, 2, 3, 1, 2, 3]
k = 2
输出:False
该问题可以使用哈希表来解决。哈希表中的键是数字,而值是该数字最近一次出现的索引。
在进行一次数组迭代时,我们查找当前元素是否已经在哈希表中存在。如果存在,我们检查索引之间的差异是否大于 $k$。如果满足要求,则返回真。如果不满足要求,则将当前元素和索引添加到哈希表中。
from typing import List
def contains_nearby_duplicate(nums: List[int], k: int) -> bool:
num_index = {}
for i, num in enumerate(nums):
if num in num_index and i - num_index[num] <= k:
return True
num_index[num] = i
return False
该函数接受两个参数:一个整型列表 nums
和一个整数 k
。然后我们创建一个字典 num_index
并进行数组迭代,对于每个迭代项,我们在字典中检查当前数是否已经存在。如果存在,则如果当前索引减去存储的索引不大于 $k$,我们就可以返回 True
。否则,我们将当前数和索引添加到字典中,并继续迭代数组。
最终,如果没有找到符合条件的数对,则函数返回 False
。