01. 两数之和

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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

步骤

  • 因为map.has() 方法只能判断是否有key , 而不是value .

代码

// @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循环遍历 , 用时更少 ;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。