📅  最后修改于: 2023-12-03 15:35:57.095000             🧑  作者: Mango
在一个数组中,可能存在多个相同的元素。本题的目标是找到两个相同元素的最小间距距离,即这两个元素在数组中出现的位置坐标的差的绝对值的最小值。
我们可以用哈希表记录每个元素出现的位置,然后遍历整个数组,对每个元素,找到相同元素的最小距离。这个方法的时间复杂度为 $O(n)$,但需要额外的空间来存储哈希表。
另一种方法是直接对每对相同元素计算它们之间的距离,并记录最小值。这种方法的时间复杂度为 $O(n^2)$,但不需要额外的空间。
我们也可以先对数组进行排序,然后再遍历一遍寻找相邻的相同元素,这种方法的时间复杂度为 $O(n\log n)$,但需要修改原数组。
def min_distance(nums):
min_dist = float('inf')
pos = {}
for i, num in enumerate(nums):
if num in pos:
dist = i - pos[num]
min_dist = min(dist, min_dist)
pos[num] = i
return min_dist
def min_distance(nums):
n = len(nums)
min_dist = float('inf')
for i in range(n):
for j in range(i+1, n):
if nums[i] == nums[j]:
min_dist = min(min_dist, abs(i-j))
return min_dist
def min_distance(nums):
nums = sorted(nums)
n = len(nums)
min_dist = float('inf')
for i in range(1, n):
if nums[i] == nums[i-1]:
dist = i - i-1
min_dist = min(min_dist, dist)
return min_dist
以上的代码片段返回 markdown 格式的文本,可以直接在 markdown 文件中使用。