从LeetCode第一题学Map

111 阅读1分钟

判断数组中的两数之和为给定值,比较好的方法是用空间换时间,使用Map来存储。

题目

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

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

你可以按任意顺序返回答案。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/tw…

var twoSum = function (nums, target) {
  let len = nums.length;
  const MAP = new Map();
  // 第一个元素先存入哈希表
  MAP.set(nums[0], 0);
  for (let i = 1; i < len; i++) {
    // 计算需要的数字
    let other = target - nums[i];
    // 如果符合条件,返回对应的下标
    if (MAP.get(other) !== undefined) return [MAP.get(other), i];
    // 不符合的存入MAP
    MAP.set(nums[i], i)
  }
};

let tempRes = twoSum([1, 2, 3, 4, 5, 9], 10);
console.log(tempRes);

Map

Map可以用来保存键值对,任何值都可以作为键或者值,比如对象、数组。

可以使用Object么?

最好使用Map,因为Map中的key是有序的,当迭代的时候,一个Map对象以插入的顺序返回键值。在比较新的浏览器中,在这个题目中使用Object一般也可以,因为在ECMAScript2015以来,在只有字符串对象上进行迭代讲按插入顺序产生键,但还需要把数字类型转换为字符串类型。