LeetCode.1 两数之和

方法一:

遍历。遍历两次数组,时间复杂度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 }

 

上一篇:公开课--redis秒杀和公开锁----1


下一篇:【算法】两数之和