1. 两数之和
思路
嵌套循环,每一个值与剩下的值相加比较是否满足条件
var twoSum1 = function(nums, target) {for (let i = 0; i < nums.length; i++) {for (let j = 0; j < nums.length; j++) {if (j == i) continuelet res = (nums[i] + nums[j] === target)if (res) return [i, j]}}};
优化思路
上述代码假设参数为 [1,2,3], 5
- 第一次循环,
1去和2,3判断 - 第二次循环,
2去和1,3判断
这里就能发现,1已经找过2了,所以2是不需要找前面的数的,,只要继续找后面的数即可
所以内部循环不应该从0开始, 而是从i+1开始
for (let i = 0; i < nums.length; i++) {for (let j = i + 1; j < nums.length; j++) {}}
最终代码
var twoSum2 = function (nums, target) {for (let i = 0; i < nums.length; i++) {for (let j = i + 1; j < nums.length; j++) {let res = (nums[i] + nums[j] === target)if (res) return [i, j]}}};
注意: 虽然函数2省了一半循环次数,但提交代码之后,运行时间反而更长了,内存消耗也增加了一点,俗称反向优化…
反向优化(1/1) 完成
