[LeetCode]Two Sum

<span style="font-family:SimSun;">如雷貫耳的Two Sum,光聽隔壁哥們店面別人就面了兩遍,真到自己寫的時候還是沒能一遍通過,事非經過不知難!算法思想很簡單,用一個HashMap把數字出現的位置記下來,但自己第一遍提交時忘了考慮同一個數等於target的一半的情況,比如target是6,numbers是{3, 2, 4},我返回了1,1, 這是不對的。 Accepted 答案如下,紅色部分爲忘了check的條件</span>

import java.util.Map;
import java.util.HashMap;

public class Solution {
  public int[] twoSum(int[] numbers, int target) {
    Map<Integer, Integer> hash = new HashMap<Integer, Integer>();
    for (int i = 0; i < numbers.length; i++){
      hash.put(target - numbers[i], i + 1);
    }
    for (int i = 0; i < numbers.length; i++){
      if (hash.get(numbers[i]) != null && hash.get(numbers[i]) != i + 1){       
        return new int[]{i +1, hash.get(numbers[i])};
      }
    }
    return new int[]{-1, -1};
  }
}

但是這個答案循環了兩遍,其實官方給的答案可以一個循環搞定:

<pre name="code" class="java">public static int[] twoSum(int[] numbers, int target){
  Map<Integer, Integer> hash = new HashMap<Integer, Integer>();
  for (int i = 0; i < numbers.length; i++){
    int x = numbers[i];
    if (hash.containsKey(target - x)){
      return new int[]{hash.get(target -x) + 1, i + 1};
    }
    hash.put(x, i);
  }
  return new int[]{-1, -1};
}


不管怎樣,第一題正式開始了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章