leetcode刷題筆記

堂堂一個蘋果發表於2019-01-19

問題:

給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的兩個下標。

你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。

思路

首先遍歷一次整數陣列,將陣列下標和值建立雜湊表,再從頭遍歷一次雜湊表,先得出當前讀取的位置i上對於target的差complement,得到後通過檢視該值是否儲存在雜湊表的value中,若存在,返回該值的key,否則讀取下一元素。

技能點
1.java中HashMap結構知識點:

宣告語句: Map<Integer, Integer> map = new HashMap<>();
新增內容: map.put(key,value);
鑑定存在: map.containsValues(value); //本例是把num[i]作為value
      map.containsKey(key);
找到下標: map.get(value); //根據value返回下標
返回陣列: return new int[]{num1,num2};

最終程式碼:

    public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    //建立hashmap
    for (int i = 0; i < nums.length; i++) {
        map.put(nums[i], i);
    }
    //在雜湊表中遍歷每個元素,找到可能與之匹配成target的下標
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsValues(complement) && map.get(complement) != i) {
            return new int[] { i, map.get(complement) };
        }
    }
    throw new IllegalArgumentException("No two sum solution");
}

相關文章