📅  最后修改于: 2023-12-03 15:11:40.216000             🧑  作者: Mango
在一个给定数组中,我们定义一个特殊对的距离是两个索引之间的绝对差值的最小值。如果数组中有多个特殊对的距离相同,则返回任意一个特殊对即可。给定一个数组,编写一个函数来计算其中任意两个特殊数字之间的最小距离。
输入: [1,2,3,4,5] 输出: 1 解释: 在这个数组中,任何两个相邻的数字都是一个特殊对,它们之间的距离为1,因此最小距离为1。
输入: [1,3,1] 输出: 0 解释: 在这个数组中,两个特殊对 (1,3) 和 (3,1) 都有距离为0,因此最小距离为0。
我们可以使用哈希表来保存每个数字在数组的索引列表,然后对于数组中每个数字,对比它的索引列表中的差值来计算它的特殊对距离。最后返回所有特殊对距离的最小值即可。
def min_distance(nums):
index_map = {}
for i in range(len(nums)):
if nums[i] not in index_map:
index_map[nums[i]] = []
index_map[nums[i]].append(i)
min_dist = len(nums)
for num in index_map:
indexes = index_map[num]
for i in range(len(indexes) - 1):
min_dist = min(min_dist, indexes[i+1] - indexes[i])
return min_dist
该算法的时间复杂度为 $O(n)$,其中 $n$ 是数组中的元素个数。因为我们需要遍历整个数组,并且对于每个数字都需要计算它的索引列表中的相邻元素之间的差值。该算法的空间复杂度也为 $O(n)$,因为我们需要在哈希表中存储每个数字的索引列表。