在给出另一种快速方法之前,让我们先理解一下问题的要求。你想要在一个随机列表中找到两个数字之间的最短距离,同时又不对列表进行排序。下面是一个快速的解决方案:
def find_shortest_distance(nums, num1, num2):
min_distance = float('inf')
last_index = None
for i, num in enumerate(nums):
if num == num1 or num == num2:
if last_index is not None and nums[last_index] != num:
min_distance = min(min_distance, i - last_index)
last_index = i
return min_distance
这个解决方案的思路是遍历列表,同时记录上一次出现的目标数字的索引。当遇到目标数字时,我们检查上一次出现的目标数字是否与当前数字不同,如果是,则计算当前索引与上一次索引之间的距离,并更新最短距离。最后返回最短距离。
这种方法的时间复杂度是O(n),其中n是列表的长度。它不需要对列表进行排序,因此在处理大型列表时效率较高。
希望这个解决方案能满足你的需求。如果你有任何其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云