Mickey's Blog ·

【leetcode专栏】两个总和(twosum)

这是leetcode的第一期

https://leetcode.com/

是一个很神奇的地方,希望大家能也来到这里提升自己哟,而且你真的会遇见很多高端公司的面试真题

原题

无标题.png

简单分析可以知道

1肯定是两个数的和,不会出现三个才能拼凑答案的情况

2不能使用相同元素,就算使用也必须数组给你两个

3每个组合都有且唯一解

好了我的代码是这样的:

var twoSum = function(nums, target) {

for (var i =1;i<nums.length;i++){

    now = nums.shift();

    for(var j=0;j<nums.length;j++){

        if(nums[j]===target-now){return [i-1,i+j]}

    }

}

};

我的初步想法是,最笨速度最慢的肯定是双层的遍历,但我们其实没必要遍历我们在外层使用过的元素,因为元素不会重复使用,所以我弹出了外层使用过的元素,再遍历内层数字,这样我的执行次数就会随着代码的进行逐渐减小。

然后我读了运行速度最快的代码是这样的:

无标题.png

使用遍历的同时,讲数组反向hash 这样就可以直接使用键来判断是否是答案对,非常灵性