如何用JavaScript高阶函数实现两数之和配对查找功能
用JavaScript高阶函数实现两数之和配对查找
嘿,我来帮你把原来的嵌套循环方案改成更简洁优雅的高阶函数版本!这里我们可以利用数组的高阶函数结合集合来优化,不仅代码更清爽,时间效率也能从O(n²)提升到O(n)。
方案一:使用Array.prototype.find()(推荐)
这个方案用find高阶函数遍历数组,一旦找到符合条件的元素就停止遍历,完美贴合你原代码“找到第一对就返回”的逻辑:
function findPairForSum(integers, target) { const seenNumbers = new Set(); // 用find遍历数组,定位第一个能配对的数字 const matchedNum = integers.find(currentNum => { const complement = target - currentNum; // 如果补数已经被记录过,说明找到了配对 if (seenNumbers.has(complement)) { return true; } // 没找到的话,把当前数字加入已记录集合 seenNumbers.add(currentNum); return false; }); // 根据结果返回对应内容 return matchedNum ? [target - matchedNum, matchedNum] : 'not found'; }
方案二:使用Array.prototype.forEach()
如果你更习惯用forEach这种遍历型的高阶函数,也可以这样实现:
function findPairForSum(integers, target) { const seenNumbers = new Set(); let resultPair = null; integers.forEach(currentNum => { const complement = target - currentNum; if (seenNumbers.has(complement)) { resultPair = [complement, currentNum]; } seenNumbers.add(currentNum); }); return resultPair || 'not found'; }
比原方案更优的点
- 原嵌套循环是暴力遍历,每个元素都要和其他所有元素比对,效率偏低;而这里用
Set存储已遍历元素,查找补数仅需O(1)时间,整体效率大幅提升 - 高阶函数的写法更符合现代JavaScript风格,不用手动管理循环索引,代码可读性更强
内容的提问来源于stack exchange,提问作者josh_c
相关产品推荐
相关产品推荐

