Leet code1. Two Sum

一言敝之就是職業婦女。
力扣久仰大名,最近需要多唸點這方面知識,簡單筆記,有AI 協助真的太好了,不用一直反覆找資料,有疑問的地方可以一直問,甚至可以把自己想法和他討論,可以讓自己夠快融會貫通:)
題目描述
給你一個整數陣列 nums 和一個目標值 target,
請找出陣列中和為目標值的兩個數字,回傳他們的索引。
解題思路
用 hash map 存已經看過的數字和索引
每次看新數字時,檢查 target - num 有沒有在 hash map 裡
有的話就回傳兩個索引,沒有就把新數字塞進 hash map
程式碼
```js
const twoSum = function(nums, target) {
const map = {}
for (let i = 0; i < nums.length; i++) {
const result = target - nums[i]
if (map[result] !== undefined) {
return [map[result], i]
}
map[nums[i]] = i
}
}
易錯點
hash map 存「值:索引」
先檢查 result,有才回傳,沒有才存進 map
不要把自己跟自己配對
白癡比喻
就像在超商湊滿額,
每拿一樣商品就問:有沒有人缺我這個金額?
有的話直接湊對結帳XD
測試案例
markdown複製
```js
twoSum([2,7,11,15], 9) // [0, 1]
twoSum([3,2,4], 6) // [1, 2]
twoSum([3,3], 6) // [0, 1]
進階思考(可選)
這題用暴力法 O(n^2) (雙層 for 迴圈)也能做,但 hash map 解法 O(n) 更快
如果要回傳所有組合,可以用陣列存結果