📅  最后修改于: 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)。