📜  门|门 IT 2005 |问题 8(1)

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

门|门 IT 2005 问题 8

问题描述

在一个数组中,找出两个数字之和等于给定的目标值,返回这两个数字的下标。假设每个输入只对应一个答案,且同样的元素不能被重复利用。

例如:

输入: nums = [2, 7, 11, 15], target = 9

输出: [0, 1]

解释: nums[0] + nums[1] = 2 + 7 = 9

解决方案
暴力枚举法

对于每个元素,依次寻找与之配对的元素,时间复杂度为 $O(n^2)$。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i + 1, len(nums)):
                if nums[i] + nums[j] == target:
                    return [i, j]
哈希表法

使用哈希表存储每个数字的索引,对于每个数字,在哈希表中查找是否存在另一个数字与之配对,时间复杂度为 $O(n)$。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hash_table = {}
        for i, num in enumerate(nums):
            if target - num in hash_table:
                return [hash_table[target - num], i]
            hash_table[num] = i
总结

暴力枚举法的时间复杂度较高,虽然可以解决问题,但不适用于大规模数据的处理。哈希表法可以在O(n)的时间复杂度内找到答案,是比较优秀的解决方案。