📅  最后修改于: 2023-12-03 15:11:40.439000             🧑  作者: Mango
给定一个整数数组,找到数组中最大和最小元素之间的最小距离。要求时间复杂度为O(n)。
首先,需要寻找数组中最大值和最小值,可以通过遍历整个数组来实现。
其次,需要计算相邻元素间的距离,找到最小距离。
最后,返回最小距离即可。
代码实现如下:
def min_distance(arr):
n = len(arr)
if n < 2:
return 0
max_val = arr[0]
min_val = arr[0]
for i in range(n):
if arr[i] > max_val:
max_val = arr[i]
if arr[i] < min_val:
min_val = arr[i]
distance = (max_val - min_val) / (n - 1)
min_distance = float("inf")
for i in range(n):
for j in range(i + 1, n):
if abs(arr[i] - arr[j]) < min_distance:
min_distance = abs(arr[i] - arr[j])
return min_distance
代码中,首先遍历一遍数组找到最大值和最小值,然后计算相邻元素间的距离。接着,遍历整个数组,寻找最小距离。
时间复杂度为O(n^2),不够优秀。我们可以优化一下,通过计算任意一对相邻元素间的距离和最大值、最小值之间的距离的比较来更新最小距离值,从而避免对每个元素对进行遍历。
代码实现如下:
def min_distance_optimized(arr):
n = len(arr)
if n < 2:
return 0
max_val = arr[0]
min_val = arr[0]
for i in range(n):
if arr[i] > max_val:
max_val = arr[i]
if arr[i] < min_val:
min_val = arr[i]
distance = (max_val - min_val) / (n - 1)
min_distance = float("inf")
for i in range(1, n):
if abs(arr[i] - arr[i-1]) < min_distance:
min_distance = abs(arr[i] - arr[i-1])
return min_distance
代码中,我们计算出数组中每个元素与相邻元素的距离,并且与最大值和最小值之间的距离比较,然后更新最小距离值。
时间复杂度为O(n),已经达到最优解。
本文介绍了如何找到数组中最大和最小元素之间的最小距离,并分别给出了时间复杂度为O(n^2)和O(n)的解法。在实际开发中,应该使用时间复杂度更低的解法来解决问题。