【算法系列】两数之和
题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
解题
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);
理解
该题目难度为简单,主要是学会利用空间去换算时间