判断数组中的两数之和为给定值,比较好的方法是用空间换时间,使用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以来,在只有字符串对象上进行迭代讲按插入顺序产生键,但还需要把数字类型转换为字符串类型。