📜  算法|杂项|问题11(1)

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

算法|杂项|问题11

问题描述

给定一个整数数组 nums 和一个目标值 target,请在该数组中找出和为目标值的两个整数。

解决方案

最直观的想法是使用暴力枚举,复杂度为 O(n^2)

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

更好的方法是使用哈希表,复杂度为 O(n)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        hash_table = {}
        for i in range(n):
            if target - nums[i] in hash_table:
                return [hash_table[target - nums[i]], i]
            hash_table[nums[i]] = i
        return [-1, -1]
复杂度分析
  • 暴力枚举:时间复杂度 O(n^2),空间复杂度 O(1)
  • 哈希表:时间复杂度 O(n),空间复杂度 O(n)
参考链接