Skip to content

LeetCode题解:1. 两数之和,JavaScript,HashMap,详细注释 #106

Open
@chencl1986

Description

@chencl1986

原题链接:
https://leetcode-cn.com/problems/two-sum/

解题思路:

  1. 遍历数组,每次保存target - nums[index]和index。
  2. 下次遍历时,如果在Map中找到了target - nums[index],就表示找到了两个数的和为target。
  3. 此时可以直接从Map中取出保存的index,与当前值的index组合则为结果。
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (nums, target) {
  // 用Map保存已遍历的index结果
  let map = new Map();

  for (let index = 0; index < nums.length; index++) {
    // 判断当前值是否已在Map中存储,如果有就表示找到了两个数可以想加等于target
    if (typeof map.get(nums[index]) === 'number') {
      // 返回已保存的index和当前值的index
      return [map.get(nums[index]), index];
    }
    // 将当前值与target的差,以及当前值的index保持在Map
    // 当遍历到target - nums[index],就表示找到了两数之和为target,可以直接把当前的index取出
    map.set(target - nums[index], index);
  }
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions