编程算法面试题

两数之和 – 面试最优解法详解

给定一个整数数组和目标值,找出两个加起来等于目标值的数,返回它们的下标。

为什么面试官会问这道题

两数之和是编程面试最经典的入门题。它考察你从暴力法优化到高效解法的能力、对哈希表的掌握,以及分析时间和空间权衡的技巧。

如何回答

  1. 1

    先讲暴力法 O(n²) 双重循环,展示你理解了问题。

  2. 2

    优化到 O(n) 哈希表法:遍历数组,对每个元素检查 target 减去当前值是否在哈希表中。

  3. 3

    用一个例子验证你的逻辑。

  4. 4

    讨论边界情况:重复值、没有有效配对、负数。

参考回答示例

暴力法用两层循环检查所有配对——O(n²) 时间,O(1) 空间。优化方案用哈希表:遍历数组时,对每个数计算补数(target 减当前值),若补数在哈希表中则返回两个下标,否则将当前数和下标存入哈希表。时间 O(n),空间 O(n)。例如 [2, 7, 11, 15],target=9:下标0时补数7不在表中,存 {2:0};下标1时补数2在表中下标0,返回 [0,1]。我总会确认数组是否已排序(排序数组可用双指针 O(1) 空间),以及是否可能有多组有效配对。

实用技巧

  • 总是先讲暴力法再优化——展示结构化思维。

  • 询问数组是否有序;有序的话双指针法只需 O(1) 空间。

  • 确认返回下标还是值,以及同一个元素是否能用两次。

常见问题

如果有多组有效配对怎么办?

和面试官确认。经典题只要求返回任一组。如果要所有配对,找到第一组后继续遍历即可。

可以先排序吗?

排序需要 O(n log n) 且会丢失原始下标。哈希表法 O(n) 且保留下标,更优。

三数之和怎么做?

三数之和通常先排序,对每个元素用双指针,时间复杂度 O(n²)。

面试时担心忘词?即答侠实时助你

即答侠 AI 实时监听面试对话,自动识别问题并即时生成回答建议——无感辅助,让你从容应对每一道题。

免费试用即答侠