📜  QA – 安置测验|数的可整性 |问题 1(1)

📅  最后修改于: 2023-12-03 15:34:33.816000             🧑  作者: Mango

QA – 安置测验|数的可整性 |问题 1

问题描述

编写一个函数,接受一个整数数组 nums 和一个整数 k 作为输入,判断数组中是否存在两个不同的索引 ij,使得 nums[i] = nums[j],并且 ij 的差的绝对值最大为 k

函数签名
def containsNearbyDuplicate(nums: List[int], k: int) -> bool:
输入输出示例
示例 1

输入:

nums = [1,2,3,1], k = 3

输出:

True

解释:

在索引 i=0 和 j=3 处,nums[i] = nums[j] = 1,且 i 和 j 的差的绝对值为 3,满足题目要求。
示例 2

输入:

nums = [1,0,1,1], k = 1

输出:

True

解释:

在索引 i=1 和 j=2 处,nums[i] = nums[j] = 1,且 i 和 j 的差的绝对值为 1,满足题目要求。
示例 3

输入:

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