思路是用 HashMap 保存 <元素, 下標(biāo)>。
遍歷數(shù)組,對(duì)于每個(gè)元素nums[i],先找 HashMap中是否已經(jīng)有target - nums[i] 存在( HashMap.containsKey(key) ),存在則返回結(jié)果(下標(biāo)組成的長(zhǎng)為2的數(shù)組)。不存在則保存<nums[i], i>, 即 <元素, 下標(biāo)>。
題目規(guī)定每個(gè) 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};
}
}