当前位置: 首页 > Web前端 > HTML

两个数之和

时间:2023-03-28 10:50:50 HTML

题目描述给定一个整数数组nums和一个整数目标值target,请在数组中找到和为目标值target的两个整数,并返回它们的数组标记。您可以假设每个输入只有一个答案。但是,数组中的相同元素不能在答案中重复出现。您可以按任何顺序返回答案。示例1:输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums[0]+nums[1]==9,返回[0,1]。示例2:输入:nums=[3,2,4],target=6输出:[1,2]示例3:输入:nums=[3,3],target=6输出:[0,1]forcebutton原题地址:https://leetcode.cn/problems/...看一下解法...四种解法,逐层递进,主要思路...方案一,直接二层循环判断值是否相等vartwoSum=function(nums,target){for(leti=0;i{returnitem==otherVal})return[k,i]}else{obj[i]=nums[i]//5.不包含也没关系,直接用对象保存一份即可。对象的键是索引i,对象的值是索引项i对应的值nums[i],方便后续匹配}}};思路和方案二数组的使用方式基本相同,都是通过差值来判断是否还有另外一项。虽然可以解决问题,但是这种写法是目前三种方案中最差的一种写法,因为Object.values,includes,findIndex方法,所以效率很低。交扣可以勉强通过。这里放个图,大家就知道打败5%基本就是倒计时了。这很尴尬,但没关系。我们主要需要第四个思路,利用Map集合判断其他值是否存在?首先,这个解是最优解,时间和空间复杂度都处理的很好。在说Map集合的解决方案之前,我们先回顾一下Map集合的基本功能,以便更好的理解后面的代码Map。知识简单复习letmap=newMap()//new实例化一个Map对象//添加keyvaluemap.set('name','MonkeyKing')map.set('age','500')map.set('home','花果山水帘洞')console.log(map.has('name'));//是否有key等于name的属性//trueconsole.log(map.get('name'));//通过keyconsole.log(map.has('score'))获取其值;//是否存在key等于score的属性名//trueconsole.log('mapcollection',map);我们来看看打印出来的'地图集'的结果:仔细一看,哟,这个地图集看起来和对象差不多。我们可以简单的理解为Map集合是一种特殊的对象存储形式。详细了解Map集合可以看官方mdnhttps://developer.mozilla.org...使用Map集合存储数组数据假设我们有一个数组就是:letnums=[19,24,25,28,30]我们来看看对象是如何模拟这个数据的存储的letobj={0:19,1:24,2:25,3:28,4:30}//使用对象存储,对象的key是数组的下标索引,对象的value是数组的索引值。当然,数组也可以理解为一种特殊的对象。让我们看一下使用Map集合来存储这个数组。letmap=newMap()map.set(0,19)map.set(1,24)map.set(2,25)map.set(3,28)map.set(4,30)console.log('地图集合',地图);看打印'mapcollection':这里一定要倒过来,第0项是19,可以用map.set(0,19)或者map.set(19,0)来使用,具体方法看实际需要,本题用map.set(19,0)比较合适下面我们看下面具体的代码,结合注释,应该对Mapset求解和有更好的理解两个数字的代码vartwoSum=function(nums,target){letmap=newMap()//1.创建一个地图集合来存储数据for(leti=0;i