📜  门| GATE-CS-2016(套装1)|第 36 题(1)

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

题目描述

这道题目是GATE-CS-2016(套装1)里的第36道题。题目描述如下:

有一个长度为n的数组A。找到两个不同的整数i和j,使得A[i]=A[j],并且|i-j|最小。如果有多个这样的对,则返回最小的|i-j|。

你需要设计并实现一个时间复杂度为O(n)的算法来解决这个问题。

解题思路

我们可以用哈希表来解决这个问题。遍历整个数组,对于每个元素a[i],将其值作为哈希表的键,记录下标i为哈希表的值。

如果我们遇到一个新值,我们只需要检查哈希表中是否已经有该键值。如果有,我们将当前下标i与哈希表中记录的下标j相减,并更新最小差。然后我们将该键值的值更新为当前下标i。然后我们继续往下遍历数组,重复这个过程直到取遍所有元素。

解题代码

下面是Python语言的解题代码实现:

def find_minimum_distance(a):
    m = {}
    min_distance = len(a)
    for i in range(len(a)):
        if a[i] in m:
            min_distance = min(min_distance, i - m[a[i]])
            m[a[i]] = i
        else:
            m[a[i]] = i
    return min_distance

时间复杂度

这个算法使用了哈希表,时间复杂度为O(n)。