import java.util.HashMap;
/**
* 要求:这个函数twoSum必须要返回能够相加等于目标数字的两个数的索引,且index1必须要小于index2。
* 请注意一点,你返回的结果(包括index1和index2)都不是基于0开始的。你可以假设每一个输入肯定只有一个结果。
*
* @author pomay
*
*/
public class TwoSum {
// 时间复杂度o(n)
public int[] sum(int[] numbers, int target) {
int[] result = new int[numbers.length];
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
// 因为题目要求返回的结果(包括index1和index2)都不是基于0开始的,将值和index存入map
for (int i = 0; i < numbers.length; i++)
map.put(numbers[i], i + 1);
// 从第一个开始,把每个数据a对应的target-a求出来
for (int i = 0; i < numbers.length; i++) {
int value = target - numbers[i];
// 判断map里面有没有这个target-a,并且下标不是a的下标
if (map.containsKey(value) && map.get(value) != i + 1) {
// 如果有获得该下标
int index = map.get(value);
// 判断该下标是在a前还是后
if (i + 1 < index)
result = new int[] { i + 1, index };
result = new int[] { index, i + 1 };
}
}
return result;
}
public static void main(String[] args) {
int[] numbers = new int[] { 2, 7, 11, 15 };
int target = 9;
TwoSum t = new TwoSum();
int[] result = t.sum(numbers, target);
System.out.println("[" + result[0] + "," + result[1] + "]");
}
}