[LeetCode] #1 Two Sum 解題

題目連結

題型解說

這是一題難度為簡單的題目,主要是用來暖個身

需要設計一個方法,此方法有兩個參數

第一個參數是一個數字的數組,第二個參數是一個目標數字

要求是找出數組中哪兩個數字相加等於目標數字

回傳索引

解題思路

大多數人(包括我)的第一印象就是利用兩個迴圈來計算出結果

當然相信這種方法也是可以得出一樣的答案

但是效率上就會比較低效

而且也過不了LeetCode的測試案例

所以得換個方式,利用空間換取時間

創建一個Map,Key紀錄數字、Value紀錄索引

目標數減去當下數字的差存在Map中,直接回傳結果

不存在則將當下數字存入Map

程式碼

Java

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> temp = new HashMap<>();
        
        for (int i = 0, len = nums.length; i < len; ++i) {
            int j = target - nums[i];
            
            if (temp.containsKey(j) == true) {
                return new int[] {temp.get(j), i};
            }
            
            temp.put(nums[i], i);
        }
        
        return null;
    }
}