js算法--力扣-两数之和

一、算法描述

在这里插入图片描述

二、解题思路

首先说明我的性能一般的思路,下面会介绍大神的解题思路
看一下,我写的代码
在这里插入图片描述
我的思路比较暴力
直接遍历传进来的数组,最外层从第0个开始循环遍历,嵌套的一层,从后往前遍历(但是除了自身),如果发现两个数字相加等于targe,就返回这两个数在数组中的下标。
举个例子,现在给了一个数组
[2,7,11,15],
然后target是9,
那么最终答案应该是返回[0,1]

第一步:i=0,j=3 ,nums[0]+nums[3] !== target
第二步:i=0,j=2 ,nums[0]+nums[2] !== target
第三步:i=0,j=1 ,nums[0]+nums[1] == target
此时就返回[0,1]

大神的解题思路
在这里插入图片描述
用到了ES6的map,不了解map的可以先看一下文章,了解一下
https://blog.csdn.net/qq_41880073/article/details/121913063
因为两个数相加等于target,说以用target减去其中一个数就是另一个数,如果不在,就需要将其以键值的形式加入map,如果这个数在map里,就证明已经找到,返回这个数的index(保存在map中的value中了)和现在索引index就可以了
举个例子,现在给了一个数组
[2,7,11,15],
然后target是9,
那么最终答案应该是返回[0,1]

第一步: index=0, 此时的map是空的,所以map.has(target - nums[0])为false,为false的时候就执行map.set(nums[0),0),所以此时的map为[{2,0}]
第二步: index=1, 此时的map不为空,但是map.has(target - nums[1])为true,为true的时候就执行
return [map.get(target - nums[1]), index];
所以返回[0,1]
不需要重复的查找对比,所以性能会提升一大截

Guess you like

Origin blog.csdn.net/qq_41880073/article/details/121913755