题目描述
思路
假设nums[i] + nums[j] = target
nums[i] + nums[j] = target;
nums[j] = target - nums[i];
我的解题
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
for(var i = 0; i < nums.length; i++) {
const res = target - nums[i];
for(var j = i+1; j < nums.length; j++) {
if(res === nums[j]) {
return [i, j];
}
}
}
};
优质解题
- 思路
设定一个map集合,存放中间数组
循环数组,
在循环内,设定一个变量targetNum,它等于目标值-数组的当前循环到的数字对应的值
然后判断map是否包含这个变量值,如果包含就可以输出这个结果
如果不包含,就把当前循环到的数字对应的值和当前循环的数字存储到map集合里
然后进行循环,直到循环结束
- 解题
var twoSum = function(nums, target) {
const map = {}
const len = nums.length
for(let i=0;i<len; i++){
const targetNum = target - nums[i];
if(targetNum in map) return [map[targetNum], i]
map[nums[i]] = i
}
};
关键用map,将时间复杂度从O(n^2)降至O(n)