目录
题目描述
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的两个整数,并返回它们的数组下标。
示例
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回 [0, 1]。
解题思路
-
使用哈希表记录已经遍历过的数字及其索引。
-
在遍历过程中,检查当前数字与目标值之差是否已经在哈希表中,如果是则找到答案。
数据结构
使用哈希表(HashMap)存储数字及其索引。
java代码解题
public class TwoSums {
/**
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回 [0, 1]。
*/
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[]{};
}
}
单元测试
class TwoSumTest {
@Test
public void testTwoSum() {
TwoSum solution = new TwoSum();
int[] nums = {2, 7, 11, 15};
int target = 9;
int[] expected = {0, 1};
assertArrayEquals(expected, solution.twoSum(nums, target));
}
}