Two Sum -- LeetCode [数组类]
2014-09-18 00:52
369 查看
思路:思路很容易,这题一看就应该时间空间为O(n),所以只要过一遍数组。用哈希表维护数组的值作为key,用数组的index作为value。 遍历数组的时候,用HashMap来查看下是不是有target-numbers[i]这个值,有就可以输出了。遍历一遍找不到就输出空。
注意点:hashmap构建的时候应该是查完当前这个值没有的话就压入hashmap,这样是为了保证查的时候不会查到自身的这个值。如果数组后面有对应的value,等到遍历到那个值的时候自然会查到对应值。
误区:一开始想用夹逼的方法,后来发现返回的是index,如果排序会打乱顺序。用哈希表存这个index的话,到后面查询时,容易只查到第一个index,那样如果有重复的元素就不对了。
代码:
注意点:hashmap构建的时候应该是查完当前这个值没有的话就压入hashmap,这样是为了保证查的时候不会查到自身的这个值。如果数组后面有对应的value,等到遍历到那个值的时候自然会查到对应值。
误区:一开始想用夹逼的方法,后来发现返回的是index,如果排序会打乱顺序。用哈希表存这个index的话,到后面查询时,容易只查到第一个index,那样如果有重复的元素就不对了。
代码:
public int[] twoSum(int[] numbers, int target) { int[] res = new int[2]; if (numbers == null || numbers.length < 2 ) return res; HashMap<Integer,Integer> map = new HashMap<Integer, Integer>(); for (int i=0;i<numbers.length;i++){ if (map.containsKey(target-numbers[i])){ res[0] = map.get(target-numbers[i]); res[1] = i+1; return res; } map.put(numbers[i], i+1); } return res; }
相关文章推荐
- LeetCode Online Judge 题目C# 练习 - Two Sum
- LeetCode 1: Two Sum
- [LeetCode] 1. Two Sum
- LeetCode: Two Sum
- LeetCode1 Two Sum
- LeetCode001__TWO SUM
- LeetCode:Algorith1 —Two Sum
- LeetCode 1. Two Sum
- 【leetCode】Two Sum
- LeetCode on the way, two sum
- 【LeetCode 1】算法修炼 --- Two Sum
- LeetCode 1. Two Sum
- leetcode 1 -- Two Sum
- LeetCode --- 1.Two Sum
- LeetCode 1:Two Sum
- LeetCode --Two Sum
- 【LeetCode】1. Two Sum
- 【leetcode】Two Sum
- LeetCode_Two Sum
- Leetcode 1. Two Sum