两数之和
两数之和(Two Sum)是一个经典的算法问题,题目要求在给定的整数数组中找到两个数,使它们的和等于目标值,并返回这两个数的索引。
下面是用Java实现的解决方案:
import java.util.HashMap;
public class TwoSum {
public int[] twoSum(int[] nums, int target) {
// 创建一个哈希表,用于存储数组中的元素和它们的索引
HashMap<Integer, Integer> map = new HashMap<>();
// 遍历数组
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i]; // 计算当前元素对应的补数
// 如果补数已经存在于哈希表中,则返回结果
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
// 将当前元素及其索引存入哈希表
map.put(nums[i], i);
}
// 如果未找到符合条件的数对,返回空数组
return new int[] {};
}
}
-
我们首先创建一个HashMap来存储数组中的元素及其对应的索引,这样我们可以通过元素的值快速地找到其对应的索引。
-
我们遍历数组,对于每个元素,我们计算它的补数,即目标值减去当前元素的值。
-
如果补数已经存在于HashMap中,说明我们找到了两个数之和等于目标值的情况,直接返回这两个数的索引。
-
如果补数不存在于HashMap中,将当前元素及其索引存入HashMap中。
-
如果遍历完数组后仍未找到符合条件的数对,返回一个空数组。
这种解法的时间复杂度为O(n),其中n为数组的长度,因为我们只需遍历一次数组。空间复杂度为O(n),因为需要使用一个HashMap来存储元素及其索引。