直接回答
两数之和:在数组中找两个数使它们相加等于 target。最优解法是哈希表一遍遍历:对每个元素 x,查 target - x 是否已在表中,在则返回答案,否则把 x 及其下标存入表。时间 O(n)、空间 O(n)。
展开解析
其他解法作对比:暴力双重循环 O(n²),是基线但不是面试终点;若数组有序或可排序,排序后用双指针从两端向中间夹逼,时间 O(n log n)、空间 O(1),但排序会打乱原始下标,要求返回下标时不适用。哈希表版本的易错点:必须在"先查后存"的顺序下操作,否则元素 x 会和自己配对(如 target = 2x 时误判);存在多解或重复元素时按题意处理。追问方向:三数之和(排序+枚举+双指针,注意去重)、两数之和 II(输入已排序,双指针 O(1) 空间)、数据流中多次查询的设计题(存全部数 vs 存两两和的取舍)。
示例
def two_sum(nums, target):
seen = {}
for i, x in enumerate(nums):
if target - x in seen:
return [seen[target - x], i]
seen[x] = i