📜  与给定的总和和距末端的最大最短距离配对(1)

📅  最后修改于: 2023-12-03 15:21:32.586000             🧑  作者: Mango

题目描述

给定一个整数数组以及一个目标和,找到和为目标和的两个数,使它们和数组末尾的距离最小且距离差最大,返回这两个数。

示例

例如,对于数组 nums = [2, 7, 11, 15] 和目标和 target = 9,因为 2 + 7 = 97 与数组结束的距离为 12 与数组结束的距离为 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$ 为数组的长度,存储哈希表所使用的额外空间。