解法一:暴击解法 遍历二遍 时间复杂度n的平方 空间复杂度1
var twoSum = function(nums, target) {
for (let i = 0; ; i++) { // 枚举 i
for (let j = i + 1; j < nums.length; j++) { // 枚举 i 右边的 j
if (nums[i] + nums[j] === target) { // 满足要求
return [i, j]; // 返回两个数的下标
}
}
}
};
解法二:暴力解法的核心是 nums[i] + nums[j] = target 变个形状就是nums[i] = target - nums[j] 就变成了在一堆数里面找一个数 hash表很适合做这件事 将j与nums[j]存到hash表里面 这里特殊的是 j是key nums[j]是value 以为要返回的是j。
我说的不是很清楚 看看这两个题解的动画就明白了
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
const prevNums = {}
for (let i =0; i<nums.length ;i++){
const curNum = nums[i]
const targetNum = target - curNum
const targetNumIndex = prevNums[targetNum]
if(targetNumIndex !== undefined){
return [targetNumIndex,i]
}else {
prevNums[curNum] = i
}
}
};