本文首发于 语雀文档
题目
流程图、调试代码
第 1 次尝试(通过测试用例)
流程图
代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j];
}
}
}
};
总结
通过测试用例
总的来说,很简单了,怎么说也是 leetcode 第一题。
第 2 次尝试(通过测试用例)
这题它不像其他题找最长组合之类的,而是比较单个值,所以这没办法只能一个个比较了,而我们能做的就是:看如何做到少遍历、少比较。
所以我们想想有没有办法做到一次 for 循环搞定其实在每一次比较时,我们都是知道当前项它需要多少才能达到 target,如果我们将还需要多少这个值存起来,后面的比较是不是就不再需要通过加加减减计算了,直接比较就完事了
流程图
代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
let stack = {};
for (let i = 0; i < nums.length; i++) {
if (Object.prototype.hasOwnProperty.call(stack, nums[i])) {
return [stack[nums[i]], i];
} else {
stack[target - nums[i]] = i;
}
}
};