(JS)LeetCode之路001-Two Sum

来源:互联网 发布:bluehost域名跳转 编辑:程序博客网 时间:2024/06/05 22:53

javascript的LeetCode之路001。

题目:给定一组整数,将两个数的返回指数相加,使它们相加成一个特定的值。
您可以假设每个输入都有一个解决方案,不要使用相同的元素两次。(来自百度翻译)。

要求提要:在一个数组中找出两个数相加等于目标值的(这里是16),数组中的每个值只能用一次。

我的代码:

var a=[1,2,3,4,5,3,6,47,4,32,434,534,10,9,12,-1,16,8];console.log(a);var b=new Array();var c=new Array();var d=new Array();var e=new Array();var f=new Array();var g=new Array();//第一步,获取小于16的值,并把它们的key保存在c数组中for(let i=0;i<a.length;i++){if(a[i]<=16){b.push(a[i]);c.push(i);}}//第二步,获取9-b的差值,存到d中for(let j=0;j<b.length;j++){d[j]=16-b[j];//第三步,在a中去查找d。e[j]=a.indexOf(d[j]);//处理结果if((e[j]!=-1)&&(e[j]!=c[j])){if((g.indexOf(e[j])==-1) &&(f.indexOf(e[j])==-1) ){g.push(e[j]);f.push(c[j]);}}}//输出答案for(let i=0;i<g.length;i++){console.log(f[i]+','+g[i]);}

我的代码思路应该是很普通的,一步一步的走,虽然也能得到结果,可是进行的步骤也比较多。


大神的代码:

var a=[1,2,3,4,5,3,6,47,4,32,434,534,10,9,12,-1,16,8];var num=16;var b = [];var map={};for(let i=0;i<a.length;i++){if(map[num-a[i]]!=undefined){b[0]=num-a[i];b[1]=i;console.log(b);}map[a[i]]=i;}

大神思路关键就在上面红字部分,感觉简单暴力!!!

可见,思路不同代码量可以节省很多。

程序新手上路,请多指教!


原创粉丝点击