前言
若水从事开发已有数月,一直觉得自己特被菜,据老员工说多刷力扣可以提高自己写代码的思路,所以自己从现在开始就要刷力扣了,在此我也会说一下自己思路和思考等,不足之处还请大家多多补充!
题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
输入:nums = [2,3,11,7], target = 9 输出:[0,3] 解释:因为 nums[0] + nums[3] == 9 ,返回 [0, 3] 。
思路
这里给了我们一个
nums
数组,又给了一个target
,这道题的意思是,让我们在nums
数组中找到两个数,这两个数加起来的之和等于target
变量值,我们这里可以创建一个map对象,然后通过for循环的方式进行遍历nums
数组,在通过traget减去nums
数组中的每个值,以此计算出那个数能跟当前的数字相加等到target
变量的值,最后在检查map对象中是否存在这个数,如果有则返回结果,如果没有则把nums
数组中的每个数最为key值,下标作为value值存在map对象中
实现
根据上面的思路我们来实现一下
var fn=function(nums,target){ //我们先创建一个空的Map对象 const map=new Map(); for(let i=0;i<nums.length;i++){ //拿target的值与nums数组中的每个值进行相减 const elm=target-nums[i] //检查map中是否存在相减后的值,如果存在则进入 if(map.has(elm)){ //进入之后获取到当前相减值的value,也就是对应的下标,在加上当前的i返回出去一个数组 return [map.get(elm),i]; }else{ //如果没有找到则进行添加,这里添加就是为了以后方便查找,所以将数组中的值作为key,下标作为value map.set(nums[i],i) } //如果最后没有找到则返回一个空数组 return [] } } let nums=[2,3,11,7]; let target=9; //使用 fn(nums,target)
坚持努力,无惧未来!