题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,
并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解析:
代码:
import java.util.*;
public class code1 {
// 法一:暴力法
// public static int[] twoSum(int[] nums, int target) {
// for (int i = 0; i < nums.length; i++) {
// for (int j = i + 1; j < nums.length; j++) {
// if (nums[j] == target - nums[i]) {
// int a[] = new int[] { i, j };
// return a;
// }
// }
// }
// throw new IllegalArgumentException("No two sum solution");
// }
// 法二:两遍哈希表
// public static int[] twoSum(int[] nums, int target) {
// Map<Integer, Integer> map = new HashMap<>();
// for (int i = 0; i < nums.length; i++) {
// map.put(nums[i], i);
// }
// for (int i = 0; i < nums.length; i++) {
// int temp = target - nums[i];
// if (map.containsKey(temp) && map.get(temp) != i) {
// return new int[] { i, map.get(temp) };
// }
// }
// throw new IllegalArgumentException("No two sum solution");
// }
// 法三:一遍哈希表
public static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int temp = target - nums[i];
if (map.containsKey(temp)) {
return new int[] { map.get(temp), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solutclion");
}
public static void main(String[] args) {
int nums[] = { 2, 7, 11, 15 };
int target = 9;
int[] b = twoSum(nums, target);
System.out.print("[");
for (int i = 0; i < b.length; i++) {
if (i != b.length - 1) {
System.out.print(b[i] + ", ");
} else {
System.out.print(b[i]);
}
}
System.out.print("]");
}
}
运行结果:
参考:
- 1. 两数之和——题解
- Java 数组
- 重新认识java(十一)---- java中的数组
- 类 HashMap<K,V>
- API学习HashMap
- 【深入Java基础】HashMap的基本用法
- Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
- Java map 详解 - 用法、遍历、排序、常用API等