LC 1哈希表简单第 21 / 95 题

两数之和

Two Sum

哈希表一次遍历
本机进度仅保存在当前浏览器

题目描述

给定一个整数数组 nums 和目标值 target,请找出数组中和等于 target 的两个整数,返回它们的下标。

示例:nums = [2, 7, 11, 15],target = 9,因为 2 + 7 = 9,返回 [0, 1]。

数据范围:每个输入恰好有唯一解,同一元素不能重复使用。

解题思路

  1. 最直观的做法是枚举所有两两组合,时间复杂度 O(n^2),在数据量大时会超时。
  2. 优化的关键在于换一个问法:遍历到 x 时,不再向前找配对,而是问"target - x 之前出现过吗"。
  3. 用哈希表记录「数值 -> 下标」,每次先查补数是否存在,再把当前数存入表内,一趟遍历即可完成。
  4. 先查后存的顺序天然避免了自己与自己配对的问题。

参考实现

查看参考实现Python · 建议先自行作答
def twoSum(nums, target):
    # seen 记录「数值 -> 下标」,一次遍历查补数
    seen = {}
    for i, x in enumerate(nums):
        if target - x in seen:
            return [seen[target - x], i]
        seen[x] = i
    return []

复杂度与归属

时间复杂度O(n)
空间复杂度O(n)
所属分类哈希表
题源LeetCode 1

关联教程

返回题图鉴