暴力解法:使用快慢指针解决,时间复杂度 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]}}
};