题目:
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
原题中给了“哈希”这个关键词的提示,不然我可能还是会傻傻的进行遍历....
先使用哈希将数组重新存储一遍,key为值,value为数组的index,然后对数组进行遍历,拿到当前值 now 之后去判断 ( target - now ) 是不是在哈希map中,是的话,那两个数的index作为返回结果,不是的话当前数不符合需求,去判断下一个数。
完整代码如下:
public int[] twoSum (int[] numbers, int target) {
// write code here
int[] res = new int[2];
Map<Integer, Integer> numsMap = new HashMap<>();
for(int i=0;i<numbers.length;i++) {
numsMap.put(numbers[i], i);
}
for(int i=0;i<numbers.length;i++) {
if(numbers[i]>target) {
continue;
}
int now = numbers[i];
int obj = target-now;
if(numsMap.get(obj)!=null&&i<numsMap.get(obj)) {
res[0] = i+1;
res[1] = numsMap.get(obj)+1;
break;
}
}
return res;
}