Given an array of integers, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
package com.wyt.leetcodeOJ;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* @author wangyitao
* @version 1.0
*
*/
public class Two_sum {
/**
* @param args<br>
* <p>測試例子<br>
* Input: numbers={2, 7, 11, 15}, target=9<br>
* Output: index1=1, index2=2
*/
public static void main(String[] args) {
int[] numbers = {2, 3, 11, 15, 16, 17, 18, 19, 7};
int target = 9;
int[] a = twoSum(numbers, target);
System.out.println(Arrays.toString(a));
}
/**
* @param numbers:帶求解int數組
* @param target:目標值
* @return 返回一個長度爲2的int數組,兩個index對應numbers元素之和爲target的值
*/
private static int[] twoSum(int[] numbers, int target) {
int len = numbers.length;
int[] index = new int[2];
/**
* 思路:對於numbers中的一個元素a,它的期待值是target-a
* 以target-a爲鍵,a爲值,將其放入map,每次put查找key是否存在,存在的話
* 說明存在這一的一個two sum
*/
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < len; i++) {
if (!map.containsKey(numbers[i])) {//做一次查找,若存在就說明找到了數對
map.put(target - numbers[i], i);//否則,放進map,繼續找
} else {
index[0] = map.get(numbers[i]) + 1;
index[1] = i + 1;
}
}
return index;
}
}