LeetCode 两数之和
01 暴力
static int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (target == (nums[i] + nums[j])) {
res[0] = i;
res[1] = j;
// System.out.println(i + " " + j);
return res;
}
}
}
return null;
}
02 两层哈希
static int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
Map numIndex = new HashMap();
for (int i = 0; i < nums.length; i++) {
numIndex.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int t = target - nums[i];
// System.out.println("t=" + t);
if (numIndex.containsKey(t)) {
int j = (int) numIndex.get(t);
if (j != i) {
res[0] = i;
res[1] = j;
// System.out.println(res[0] + " " + res[1]);
return res;
}
}
}
return null;
}
03 一层哈希
static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> numIndex = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
if (numIndex.containsKey((target - nums[i])))
return new int[]{numIndex.get(target - nums[i]),i};
numIndex.put(nums[i], i);
}
return null;
}