javascript - 在这种情况下,我如何实现功能循环语句而不是 for 循环?
问题描述
如何使用函数循环语句(map、forEach、reduce)而不是 for 循环来检查数组中任何两个元素的总和是否存在于数组中。
例如这样的数组
[1, 2, 9, 4, 3] // would return true as 1 + 2 = 3
[2,7,12,6,8,20] // true as 2 + 6 = 8 which is enough to make it true
[1, 2, 4, 9] //would return false
我可以通过 for 循环来做到这一点:
const checkSumExist = arr => {
for(let i = 0; i < arr.length; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(arr.includes(arr[i] + arr[j])) return true;
}
}
return false;
}
那么在这种情况下有没有使用函数循环语句而不是嵌套for循环的解决方案???
解决方案
一个简化的实现——</p>
const main = (xs = []) =>
xs .some ((n, i) =>
xs .some ((m, j) =>
i < j && xs .includes (n + m)
)
)
console.log
( main ([ 1, 2, 4, 9, 4, 3 ]) // true
, main ([ 2, 7, 12, 6, 8, 20 ]) // true
, main ([ 1, 2, 4, 9 ]) // false
)
这种优化使用将Set
速度提高到O(1)
-</p>
const main = (xs = [], s = new Set (xs)) =>
xs .some ((n, i) =>
xs .some ((m, j) =>
i < j && s .has (n + m)
)
)
console.log
( main ([ 1, 2, 4, 9, 4, 3 ]) // true
, main ([ 2, 7, 12, 6, 8, 20 ]) // true
, main ([ 1, 2, 4, 9 ]) // false
)
请记住仅在必要时进行优化
推荐阅读
- jquery - 如何使鼠标在 Firefox 上运行不慢时制作此动画?
- python-3.x - 如何在 tkinter 文本上打印 paramiko 的实时输出
- android - 当用户从背景进入应用程序时,警报 dailog 不可见
- python - 使用 pwntools 的 EOFError
- javascript - 找不到反应本机变量“ConnectionStatus”
- reactjs - React 中的依赖周期问题
- xcode - xcode ios模拟器:如何将焦点设置在特定窗口上
- c - 如何使用 FFT 清除加速度计的噪声信号
- woocommerce - Woocommerce 发送带有代码段的密件抄送电子邮件
- c# - 如何使用访问令牌获得访问 REST API 的授权