题解 | #两数之和#
两数之和
https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
思路
使用哈希表记录,遍历数组过程中的键值对,键为数组索引处的值,值为索引,这时候,我们只要关注遍历时,目标值与当前值的差是否在哈希表中,如果在就说明找到了索引,反之则没有,则继续循环查找
代码
import java.util.*;
public class Solution {
/**
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum(int[] numbers, int target) {
int start = 0;
int end = 0;
// 构建一个哈希表
Map<Integer, Integer> map = new HashMap<>(numbers.length);
for (int i = 0; i < numbers.length; i++) {
// 判断目标值是否出现
if (map.get(target - numbers[i]) != null) {
if (i > map.get(target - numbers[i])) {
start = map.get(target - numbers[i]);
end = i;
} else {
end = map.get(target - numbers[i]);
start = i;
}
}
// 将已经遍历过的元素加入哈希表中
map.put(numbers[i], i);
}
int[] result = new int[2];
result[0] = start + 1;
result[1] = end + 1;
return result;
}
}