波斯汪
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]));
添加回答
舉報
0/150
提交
取消