LeetCode 01 兩數之和
阿新 • • 發佈:2020-10-21
LeetCode01 兩數之和
題目描述
給定一個整數陣列 nums
和一個目標值 target
,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應一個答案。但是,陣列中同一個元素不能使用兩遍。
Tips:
- 返回的是下標
- 保證有解
樣例
給定 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}; } }