![](https://i-blog.csdnimg.cn/blog_migrate/b14ad2dd87003b7bb900c64253ac618c.png)
暴力解法:使用快慢指针解决,时间复杂度 O(n^2),空间复杂度 O(n)
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let slow = 0
let 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){
++slow
fast = 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]
}
}
};