📅  最后修改于: 2023-12-03 15:21:32.586000             🧑  作者: Mango
给定一个整数数组以及一个目标和,找到和为目标和的两个数,使它们和数组末尾的距离最小且距离差最大,返回这两个数。
例如,对于数组 nums = [2, 7, 11, 15]
和目标和 target = 9
,因为 2 + 7 = 9
,7
与数组结束的距离为 1
,2
与数组结束的距离为 3
,所以返回 [2, 7]
。
此问题可以通过 哈希表 解决,在这种方法中,我们迭代一遍数组,对于每个元素,我们会在哈希表中查找目标元素 (target - nums[i])
是否存在,如果存在,就找到了一组答案,同时计算它们与末端的距离,将它们的距离和元素存储在哈希表中用于之后的查找。
哈希表的查询时间复杂度为 O(1)
,因此总时间复杂度为 O(n)
。
def findClosestPair(nums, target):
distances = {}
min_distance = float("inf")
res = []
for i in range(len(nums)):
complement = target - nums[i]
if complement in distances:
distance = len(nums) - 1 - i + distances[complement]
if distance < min_distance:
min_distance = distance
res = [nums[i], complement]
distances[nums[i]] = len(nums) - 1 - i
return res
时间复杂度:$O(n)$,其中 $n$ 为数组的长度。
空间复杂度:$O(n)$,其中 $n$ 为数组的长度,存储哈希表所使用的额外空间。