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

没有停止条件的for循环?

没有停止条件的for循环?

波斯汪 2022-10-21 10:51:28
我刚刚完成了 FreecodeCamp.com 测验中间算法脚本:最小公倍数。代码对于他们给出的测试用例(和)运行良好[1, 5],但如果我使用更大的范围,我还必须编辑代码并增加-loop 的停止条件,当我从循环中删除停止条件时,它给出了一个错误。[5, 1] [23, 18][1, 13]forfunction smallestCommons(arr) {  arr.sort((a, b) => a - b);  const creatArray = (start, stop, step) =>    Array.from(      { length: (stop - start) / step + 1 },      (_, i) => start + i * step    );  let myArray = creatArray(arr[0], arr[arr.length - 1], 1);  for (let i = myArray[myArray.length - 1]; i < 10000000; i++) {    if (myArray.every((e) => calback(e, i))) {      return i;    }  }}let calback = (elem, e) => e % elem === 0;console.log(smallestCommons([1, 5]));这段代码有什么简单的修复吗?我的解决方案是有效的还是有更好的方法来解决这个问题?谢谢
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

将解释一些代码;我们首先要做的是对数组进行排序,因为它是一个由两个数字组成的数组,在对它进行排序之后,我们需要创建一个新数组来存储从第一个元素到第二个元素的路径;我们定义最大和最小数字之间的差,以便在我们存储路径后创建一个存储路径;我们定义了两个函数来求大公约数和最小公倍数;之后我们使用 reduce 来获得 LCM 的 Value。希望这对你有帮助,gcd的算法是基于欧几里得划分


function smallestCommons(arr) {

  arr = arr.sort((a,b)=>a-b)

  let newarr = []

  let dif = arr[1]-arr[0]

  for(let i=0; i<= dif;i++){

        newarr.push(arr[0]+i)

  }

  const gcd = (a,b)=>a?gcd(b%a,a):b;

  const lcm = (a,b)=> a/gcd(a,b)*b

  return newarr.reduce(lcm);

}


console.log(smallestCommons([1, 5]));

console.log(smallestCommons([90,10]));


查看完整回答
反对 回复 2022-10-21
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

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