有没有更高效的方法来编写这个“两数之和”问题的 JavaScript 代码?


我们的任务是编写一个函数,该函数能够在最多线性时间内解决两数之和问题。

两数之和问题

给定一个整数数组,我们必须找到两个数字,使它们的和等于特定目标数字。

`twoSum` 函数应该返回两个加起来等于目标数字的数字的索引,如果没有任何两个元素加起来等于目标数字,则我们的函数应该返回一个空数组。

在 O(n) 时间内解决问题

我们将使用哈希表来记录已出现的项目,在每次循环中,我们将检查映射中是否存在任何元素,当与当前元素相加时,它们的和等于目标值,如果存在,我们将返回一个包含其索引的数组;如果我们遍历整个循环而没有满足此条件,我们将返回一个空数组。

示例

const arr = [2, 5, 7, 8, 1, 3, 6, 9, 4];
const sum = 10;
const twoSum = (arr, sum) => {
   const map = {};
   for(let i = 0; i < arr.length; i++){
      const el = sum - arr[i];
      if(map[el]){
         return [map[el], i];
      };
      map[arr[i]] = i;
   };
   return [];
};
console.log(twoSum(arr, sum));
console.log(twoSum(arr, 12));
console.log(twoSum(arr, 13));
console.log(twoSum(arr, 14));
console.log(twoSum(arr, 24));

输出

控制台输出将是:

[ 2, 5 ]
[ 1, 2 ]
[ 1, 3 ]
[ 3, 6 ]
[]

更新于:2020年8月24日

浏览量 218

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.