本文首发于 语雀文档
题目
https://leetcode-cn.com/problems/two-sum/
流程图、调试代码
https://github.com/blueju/leetcode/
第 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;}}};
