两数之和 ---力扣(javascript)

题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

解题思路:
看到这道题,当然我们会觉得很简单,思路我也是有的,首先我们会用最常用的暴力破解法去解决它,通过两个for循环去遍历数组找到两个数相加等于目标值的相对的下标

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {

    for(let i=0;i<nums.length;i++){
        for(let j=i+1;j<nums.length;j++){
            if(nums[i]+nums[j]===target){
                return [i,j]
            }
        }
    }
    
};

在这里插入图片描述在这里可以看到暴力破解法耗时长,内存消耗大,
第二种解法
利用js中map集合通过差值来寻找


/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {

   const map = new Map()
   for(let i=0;i<nums.length;i++){
       const res = target-nums[i]
       if(map.has(res)){
           return [map.get(res),i]
       }else{
           map.set(nums[i],i)
       }
   }
    
};

在这里插入图片描述
只循环一次,然后求得target和当前数值的差值,并且把数组存放在map里面,去map里面循环看是否有这个目标值,有的话,拿到对应值的下标

猜你喜欢

转载自blog.csdn.net/qq_43756675/article/details/106995858
今日推荐