📜  门| GATE CS 2019 |第 47 题(1)

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

GATE CS 2019 | 第 47 题

本题是门计算机科学和工程入门考试(GATE)2019年的第47题。该题目需要考生实现一个特定的算法,并对算法的最坏情况运行时间进行分析。

题目描述

给定一个整数数组 A[1...n],请编写一个算法,找到两个不同的下标 ij,使得 $A[i]=A[j]$ 且 $j-i$ 最小。如果没有满足条件的下标对,则返回 None

示例

假设给定的数组为 [3, 2, 1, 2, 3],则该算法应该返回 (1,4),因为 A[1]=A[4]=2,且 $4-1=3$ 为最小的下标跨度。如果数组为 [1, 2, 3, 4, 5],则不存在满足条件的下标对,应该返回 None

要求

请将你的算法写成 Python 3 函数,并按照下面的模板进行编写。

def find_min_distance(A: List[int]) -> Optional[Tuple[int, int]]:
    """
    找到指定数组中两个值相等的元素下标,且它们的跨度最小。

    Args:
        A: 给定的整数数组。

    Returns:
        如果存在满足条件的下标对,则以元组的形式返回它们的值,否则返回 `None`。

    Examples:
        >>> find_min_distance([3, 2, 1, 2, 3])
        (1, 4)

        >>> find_min_distance([1, 2, 3, 4, 5])
        None
    """
    # 在这里写下你的代码
约束条件

请注意以下几点:

  • 你的算法必须能够处理空数组。
  • 如果有多组满足条件的下标对,只需返回任意一组即可。
  • 你的算法必须是纯函数,即不能使用全局变量或改变传入的参数。
  • 你的算法必须具有线性时间复杂度和常数空间复杂度,即 $O(n)$ 时间复杂度和 $O(1)$ 空间复杂度。