思路是用 HashMap 保存 <元素, 下标>。
遍历数组,对于每个元素nums[i],先找 HashMap中是否已经有target - nums[i] 存在( HashMap.containsKey(key) ),存在则返回结果(下标组成的长为2的数组)。不存在则保存<nums[i], i>, 即 <元素, 下标>。
题目规定每个 target 只有 exactly one solution。
public class Solution
{
public int[] twoSum(int[] nums, int target)
{
if(nums == null || nums.length < 2)
return new int[2];
HashMap<Integer, Integer> hm = new HashMap<>();
for(int i = 0; i < nums.length; i++)
{
int key = target - nums[i];
if(hm.containsKey(key))
return new int[]{hm.get(key), i};
hm.put(nums[i], i);
}
return new int[]{0, 0};
}
}