[Leetcode][001] Two Sum (Java)

题目在这里: https://leetcode.com/problems/two-sum/

【标签】Array; Hash Table

【个人分析】

     这个题目,我感觉也可以算是空间换时间的例子。如果是O(n^2)的那种思路,就是对于一个数字,去扫剩下的所有数字,看有没有能够加起来和为target的组合。但是如果加入一个哈希表,我们扫过的数字都可以记录下来。

  我用的是 (target - number) 作为key, 用number在nums中的 index 作为 value, 遇到一个新的数字number,如果它存在于map 中(说明我们先前遇到过target - number),那么我们就是找到结果了。

 

 1 public class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         int[] result = new int[2];
 4         Map<Integer, Integer> indexMap = new HashMap<Integer, Integer>();
 5         for (int i = 0; i < nums.length; i++) {
 6             int number = nums[i];
 7             if (indexMap.containsKey(number)) {
 8                 // found the two numbers we are looking for!
 9                 // ! required result is not zero-based indexed, but 1-based
10                 result[0] = 1 + indexMap.get(number);
11                 result[1] = 1 + i;
12                 break;
13             } else {
14                 // put the number we are expecting into the map
15                 indexMap.put(target - number, i);
16             }
17         }
18         return result;
19     }
20 
21 }

 

posted @ 2015-05-01 03:20  StevenCooks  阅读(212)  评论(0编辑  收藏  举报