为了账号安全,请及时绑定邮箱和手机立即绑定

使用map函数代替嵌套循环条件JS

使用map函数代替嵌套循环条件JS

慕丝7291255 2023-08-05 21:00:38
我有以下函数,它接受一个数字数组和一个目标值,如果可以添加数组中的任何 2 个数字来给出目标值,则该函数返回 true,否则返回 false。例如,如果 array = [5,4,2,3,1] 且 target = 9,则该函数应返回 true,即 5+4=9。但是,如果 target = 10,该函数应返回 false,因为数组中没有 2 个数字可以相加得到 10。function Solution(array,target) {    for (var i = 0;i<array.length;i++) {      for (var j=0;j!=i && j<array.length;j++) {        if (array[i] + array[j] == target) {        return true      }    }  }  return false}上面的函数按预期工作,但是我认为这不是一个好的方法,有人可以向我展示使用地图函数的更有效的方法吗?
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可以采用一个以所需增量作为键的哈希表。


这种方法只需要一次迭代。


function solution(array, target) {

    const seen = {};

    for (const value of array) {

        if (seen[value]) return true;

        seen[target - value] = true;

    }

    return false;

}


console.log(solution([5, 4, 3, 2, 1], 9));  //  true

console.log(solution([5, 4, 3, 2, 1], 10)); // false


查看完整回答
反对 回复 2023-08-05
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

这是使用数组某种方法的简单一行解决方案。


const Solution = (array, target) =>

  array.some((x, i) => array.some((y, j) => i !== j && x + y === target));


console.log(Solution([5, 4, 2, 3, 1], 9));

console.log(Solution([5, 4, 3, 2, 1], 10));

console.log(Solution([5, 4, 3, 2, 1], 5));


查看完整回答
反对 回复 2023-08-05
?
www说

TA贡献1775条经验 获得超8个赞

您可以维护 aSet来提高效率。

当您在数组中遇到新数字时,从目标总和中减去该数字。这将告诉您需要与当前数字相加的金额才能达到目标总和。您可以使用 O(1) 检查该数字/金额是否在集合中.has()。如果它在集合中,您可以返回 true,否则,您可以将该数字添加到集合中以检查数组的进一步迭代。

请参阅下面的示例:

function solution(array, target) {

  const set = new Set();

  for(const num of array) {

    if(set.has(target-num))

      return true;


    set.add(num);

  }

  return false;

}


console.log(solution([5,4,2,3,1], 9));


查看完整回答
反对 回复 2023-08-05
  • 3 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信