📅  最后修改于: 2023-12-03 15:34:33.816000             🧑  作者: Mango
编写一个函数,接受一个整数数组 nums
和一个整数 k
作为输入,判断数组中是否存在两个不同的索引 i
和 j
,使得 nums[i] = nums[j]
,并且 i
和 j
的差的绝对值最大为 k
。
def containsNearbyDuplicate(nums: List[int], k: int) -> bool:
输入:
nums = [1,2,3,1], k = 3
输出:
True
解释:
在索引 i=0 和 j=3 处,nums[i] = nums[j] = 1,且 i 和 j 的差的绝对值为 3,满足题目要求。
输入:
nums = [1,0,1,1], k = 1
输出:
True
解释:
在索引 i=1 和 j=2 处,nums[i] = nums[j] = 1,且 i 和 j 的差的绝对值为 1,满足题目要求。
输入:
nums = [1,2,3,1,2,3], k = 2
输出:
False
解释:
存在重复数字,但是索引之差绝对值大于 k。
这道题可以使用哈希表来解决。遍历数组,把每个数字及其索引存入哈希表。当遇到重复的数字时,只需要判断当前索引和哈希表中存储的该数字的上一次索引的差是否小于等于 k 即可。如果小于等于 k,则满足题目要求,返回 True。如果遍历完数组还没有找到符合要求的索引,则返回 False。
在 Python 中,我们可以使用字典来实现哈希表。
def containsNearbyDuplicate(nums: List[int], k: int) -> bool:
# 哈希表
hash_table = {}
for i, num in enumerate(nums):
if num in hash_table and i - hash_table[num] <= k:
return True
hash_table[num] = i
return False