方法一:
遍历。遍历两次数组,时间复杂度O(n2)
方法二:
运用哈希表,将数组的值与其下标一一对应。通过在哈希表中查找target - nums[i](key)来确定目标的下标(value),当key不存在时,即当前的nums[i]与哈希表中现有元素不能构成一个正确的result,则将nums[i]存入哈希表中。因为每次存入时都表示当前的数组值与已遍历过的值不能得到结果,所以不会遇到同一个数组值重复两次的情况。之后如果有nums[j]的值,使target - nums[j]与哈希表中的key匹配,则可得到结果,此时两个数无论是否相同都是第一次出现在结果中,不存在同一个数重复出现的情况。
如果出现nums[i]与nums[j]的值相同的情况,如果两者之和是结果,则会正常输出;否则由于hashmap不能有两个相同的key的缘故,再次存入时会覆盖前一次的key,但是由于这个数的两倍不会是结果,所以对最后的结果不会有影响,即即使结果与这个数有关也会正常的输出一个出来。
1 class Solution { 2 public int[] twoSum(int[] nums, int target) { 3 Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>(); 4 for (int i = 0; i < nums.length; ++i) { 5 if (hashtable.containsKey(target - nums[i])) { 6 return new int[]{hashtable.get(target - nums[i]), i}; 7 } 8 hashtable.put(nums[i], i); 9 } 10 return new int[0]; 11 } 12 }