📜  数据结构 |数组 |问题2(1)

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

数据结构 | 数组 | 问题2

问题描述

给定一个由正整数组成的数组和一个整数目标值,找出数组中和为目标值的两个数的下标。假设每种输入只对应一个答案,数组中同一个元素不能使用两遍。

解决方案

一种常见的解决方案是使用哈希表。

我们遍历数组中的每个元素 $x$,查找是否存在一个值 $target - x$。具体地,我们可以用一个哈希表来存储数组中的元素及其下标,对于每个 $x$,我们首先查询哈希表中是否存在 $target - x$,然后将 $x$ 插入到哈希表中,即可保证不会让 $x$ 和自己匹配。

代码实现
def twoSum(nums, target):
    hash_table = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in hash_table:
            return [hash_table[complement], i]
        hash_table[num] = i
    return []
复杂度分析
  • 时间复杂度:$O(n)$,其中 $n$ 是数组中的元素个数。对于每一个元素 $x$,我们可以 $O(1)$ 地寻找 $target - x$。
  • 空间复杂度:$O(n)$,其中 $n$ 是数组中的元素个数。主要是哈希表的开销。