前端100问

【前端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;
}
上一篇 下一篇

猜你喜欢

热点阅读