講到 LeetCode,大部分人共同的回憶(以及共同的起點)大概就是 two Sum 了吧。這題會給一個陣列以及一個數字,我們要找的,就是陣列中哪兩個數字加起來剛好等於目標。雖然看起來不是很難,但新手剛碰時還是可能因為各種東西卡關,我第一次解就卡了很久QQ
其實這題暴力解也沒問題,只要用 for 迴圈或 while 慢慢兩個兩個加總並對照,就可以找到答案,但是想當然效率不會太好。換個角度思考,加法的反面就是減法,我們可以把兩個數字加起來跟目標數對照,也可以用目標數減掉正在瀏覽的陣列元素,然後拿這個得到的數字去和剩下的元素比較,看裡面有沒有我們要的。
不過,如果拿數字慢慢去比較的話,我們還是要跑一樣的迴圈數量。因此,這時候 dictionary 就上場了。dictionary 的元素是 (key, value) 的配對,在提取元素的時候,把 key 丟進去就能拿到,相較於無法直接判斷某元素是否在裡面的 array 會方便一些。所以,我們可以把目標減掉陣列元素後的數值丟到 dictionary 裡面,然後繼續往下瀏覽,如果之後的元素剛好能在 dictionary 裡面,就找到答案啦。
下面附上題目和簡單的程式碼分享,有問題或建議也歡迎留言,謝謝大家~
// javascript
const twoSum = function(nums, target) {
const dicy = {};
for(let i=0; i<nums.length; i++){
if(dict[nums[i]] >= 0){
return [ dict[nums[i]] , i]
}
dict[target-nums[i]] = i
}
};