题目:两数之和
思路:哈希。
建立一个哈希表,键是数组中的数组,值是该数的索引。然后我们就可以遍历数组,查找解是否存在。
如果是建哈希表与遍历分开,那么会存在一个问题:如果一个数刚好出现2次并且target是该数的2倍,例8,2,3,2,9:target = 4。此时第一个2的索引会被覆盖。
所以,我们建哈希表与查询结果在同一个循环内进行:拿到一个数num
,我们先判断target-num
是否在表里,如果在,那么找到答案,返回;如果不在,我们就把num
及其索引存到表里。这样避免了有重复的问题。
代码:
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < numbers.length; i ++) {
if (map.containsKey(target - numbers[i])) {
return new int[]{map.get(target - numbers[i])+1, i+1};
}
map.put(numbers[i], i);
}
return new int[2];
}
}