01. 两数之和

2020-07-09  本文已影响0人  卡尔书院

https://www.bilibili.com/video/BV1wA411b7qZ

题目

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

步骤

代码

// @lc code=start
/**
 * @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 complement = target - nums[i];
        if (map.has(complement)) {
            return [map.get(complement),i];
        }else{
            map.set(nums[i],i);
        }
    }
    return [];
};
// @lc code=end

运行流程

以 nums = [2, 7, 11, 15], target = 9为例 ,
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1] ;

i = 0 ;
map:<> ;
complement = 9 - 2 = 7 ;
map.has(complement) = false ; //现在map是空的 , 没有key = 7
添加<2,0>到map


i = 1;
map : <2,0>;
complement = 9 - 7 = 2;
map中有<2, 0>
返回数组[0, 1]

结果分析


相比于两遍for循环遍历 , 用时更少 ;

上一篇 下一篇

猜你喜欢

热点阅读