1.给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现
解析
利用HashMap来存储数组元素及其索引。在遍历数组时,我们尝试查找目标值与当前元素的差值是否已经在HashMap中。如果找到了,则返回对应的两个索引;如果没有找到,则将当前元素及其索引存入HashMap中。
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int[] twoSum(int[] nums, int target) {
// 创建一个HashMap来存储数组元素和对应的索引
Map<Integer, Integer> map = new HashMap<>();
// 遍历数组
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
// 检查HashMap中是否存在补数
if (map.containsKey(complement)) {
// 如果存在,返回结果
return new int[] { map.get(complement), i };
}
// 如果不存在,将当前数字放入HashMap中
map.put(nums[i], i);
}
// 如果没有找到,则返回一个空数组(或者抛出一个异常,视情况而定)
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args) {
Solution solution = new Solution();
int[] nums = {2, 7, 11, 15};
int target = 9;
try {
int[] result = solution.twoSum(nums, target);
System.out.println("Indices of two numbers that sum up to " + target + ": " + result[0] + ", " + result[1]);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}