【前端100问】Q86:周一算法题之「两数之和」
2021-02-20 本文已影响0人
alanwhy
写在前面
此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我
为了备战 2021 春招
每天一题,督促自己
从多方面多角度总结答案,丰富知识
周一算法题之「两数之和」
简书整合地址:前端 100 问
正文回答
题目
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
回答
function anwser(arr, target) {
let map = {};
for (let i = 0; i < arr.length; i++) {
map[arr[i]] = i;
}
for (let i = 0; i < arr.length; i++) {
var d = target - arr[i];
if (map[d]) {
return [i, map[d]];
}
}
return new Error("404 not found");
}
var twoSum = function (nums, target) {
const res = [];
loop: for (let i = 0; i < nums.length - 1; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
res.push(i, j);
break loop;
}
}
}
return res;
};
// 当arr = [4, 7, 11, 15], target = 8的时候会有问题,结果是[0, 0], 显然是有问题的
function sum(arr, target) {
const res = [];
for (let i = 0; i < arr.length; i++) {
const a = target - arr[i];
const index = arr.indexOf(a, i);
if (index >= 0) {
res.push(i, index);
}
}
return res;
}