1. 程式人生 > 實用技巧 >LeetCode 01 兩數之和

LeetCode 01 兩數之和

LeetCode01 兩數之和

題目描述

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

你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。

Tips:

  1. 返回的是下標
  2. 保證有解

樣例

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

演算法分析

暴力做法:兩重迴圈 O(n*n)

雜湊表

  • 問題的轉換:一個數a,要找到target-a, (a之前)
  • 用雜湊表儲存前面遍歷過的數,列舉當前這個數nums[i]
    時,找雜湊表中找target-nums[i],迴圈一遍即可

時間複雜度 \(O(n)\)

Java程式碼

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

        //開始遍歷一遍
        for(int i = 0;i<nums.length;i++){
            int b = target - nums[i];
            if(map.containsKey(b)){
                return new int[]{map.get(b),i};  //鍵 值   值 是儲存的下標
            }

            map.put(nums[i], i);
        }

        return new int[]{-1, -1};
    }
}