【算法系列】两数之和

118 阅读1分钟

【算法系列】两数之和

题目

leetcode-cn.com/problems/tw…

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

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

解题

leetcode-cn.com/submissions…

const nums = [2, 5, 6, 3, 9];

const getIndexs = (arr: number[], sum: number) => {
  // 暴力解决
  // for (let i = 0; i < arr.length; i++) {
  //     for (let j = 0; j < arr.length; j++) {
  //         if (arr[i] + arr[j] === sum) {
  //             return [i, j];
  //         }
  //     }
  // }

  // 空间换时间: map 去存储已经遍历过的结果,这样就只需要遍历一次
  const map = new Map<number, number>();
  for (let i = 0; i < arr.length; i++) {
    const v = arr[i];
    const j = map.get(sum - v);

    if (j !== undefined) {
      // 如果 j 存在则为已经遍历过的 key, 所以 j < i
      return [j, i];
    }

    map.set(v, i);
  }
};

getIndexs(nums, 9);

理解

该题目难度为简单,主要是学会利用空间去换算时间

拓展

Global_Objects - MapEquality_comparisons_and_sameness