两数之和

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

给定一个整数数组和目标值,返回两个数的索引,使其和为目标值。假设每个输入有且仅有一个解,且不能重复使用元素。使用哈希表存储数组值及其索引,遍历数组计算目标值与当前值的差,如果哈希表中存在该差值,则返回对应索引。例如:[2,7,11,15]目标9返回[0,1]。代码实现使用Java。

🎯

关键要点

  • 给定一个整数数组和目标值,返回两个数的索引,使其和为目标值。
  • 假设每个输入有且仅有一个解,且不能重复使用元素。
  • 使用哈希表存储数组值及其索引。
  • 遍历数组计算目标值与当前值的差。
  • 如果哈希表中存在该差值,则返回对应索引。
  • 示例1: 输入: nums = [2,7,11,15], target = 9 输出: [0,1]
  • 示例2: 输入: nums = [3,2,4], target = 6 输出: [1,2]
  • 示例3: 输入: nums = [3,3], target = 6 输出: [0,1]
  • 约束条件: 2 <= nums.length <= 104,-10^9 <= nums[i] <= 10^9,-10^9 <= target <= 10^9。
  • 初始化空哈希表,哈希表将包含数组中的值及其索引。
  • 遍历数组,计算目标值与当前值的差,如果哈希表包含该差值,则返回索引。
  • 代码实现使用Java。

延伸问答

如何找到两个数的索引使其和为目标值?

使用哈希表存储数组值及其索引,遍历数组计算目标值与当前值的差,如果哈希表中存在该差值,则返回对应索引。

能否给出一个示例来说明如何实现这个算法?

例如,对于输入 nums = [2,7,11,15] 和目标值 9,返回的索引是 [0,1],因为 nums[0] + nums[1] == 9。

这个算法的时间复杂度是多少?

该算法的时间复杂度为 O(n),因为需要遍历数组一次。

在什么情况下这个算法会失败?

该算法假设每个输入有且仅有一个解,如果输入不满足这一条件,算法可能无法正确返回结果。

如何处理数组中有重复元素的情况?

算法允许使用不同的索引,即使数组中有重复元素,只要不重复使用同一个元素即可。

这个算法的实现语言是什么?

该算法的代码实现使用 Java 语言。

➡️

继续阅读