
?暴力解法:使用快慢指針解決,時間復雜度?O(n^2),空間復雜度?O(n)
/*** @param {number[]} nums* @param {number} target* @return {number[]}*/
var twoSum = function(nums, target) {let slow = 0let fast = 1// 如果慢指針沒有超過nums邊界就繼續查找while(slow <= nums.length-1){if(nums[slow] + nums[fast] == target){return [slow,fast]}else{// 如果快指針位置的值不符合要求就讓快指針向右移動一位++fast// 如果快指針已經超過nums的邊界就讓慢指針向右移動一位// 同時將快指針移動到慢指針的下一位if(fast > nums.length-1){++slowfast = slow +1}}}
};
? 優化算法:使用map結構解決,時間復雜度?O(n),空間復雜度?O(n)
/*** @param {number[]} nums* @param {number} target* @return {number[]}*/
var twoSum = function(nums, target) {let mapIds = new Map()for (const [index, item] of nums.entries()) {// 利用map結構不重復的特點,用目標值減去當前值,也就是 9-2=7// 然后存 2,這樣之后找 7 就可以了if(!mapIds.has(target-item)){mapIds.set(item,index)}else{return [mapIds.get(target-item),index]}}
};