📜  数组问题 1 (1)

📅  最后修改于: 2023-12-03 14:55:01.501000             🧑  作者: Mango

数组问题1

问题描述

给定一个整数数组 nums ,找到其中两个不同的元素,使它们相加的和等于给定的目标值 target

假设每个输入,只对应唯一的输出。同时,数组中同一个元素不能使用两遍。

示例

输入:

nums = [2, 7, 11, 15]
target = 9

输出:

[0, 1]

解释:

因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]

解题思路

此问题可以使用哈希表来解决。我们可以建立一个哈希表,遍历数组,每次先查询哈希表中是否已经存在当前元素的“互补元素”(即 target - nums[i] ),如果存在即说明已找到答案;否则将当前元素加入哈希表中,继续下一次遍历。

代码实现
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hash_map = {}
        for i in range(len(nums)):
            if target - nums[i] in hash_map:
                return [hash_map[target - nums[i]], i]
            hash_map[nums[i]] = i
复杂度分析
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)。使用哈希表来存储每个元素的索引,最坏情况下哈希表需要存储整个数组,因此空间复杂度是 O(n)