亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用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 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號