我写的代码在一个更高的范围内超时。任何通过使用高阶ES6函数来优化代码的方法。
在线环境的链接:https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/smallest-common-multiple
function smallestCommons(arr) {
// Return the Smallest Common Multiple for pair of Input Numbers.
const [min, max] = arr.sort((a,b)=>a-b);
// Sorting Input Array to give min and max values for the range
const range = Array(max-min+1).fill(0).map((_,i)=>i+min);
// Initialize the Array
let prodAll = range.reduce((product,number)=>product*number);
// Finding the product of all numbers which is a gauranteed multiple of the range
let res = Array(prodAll/max).fill(0).map((_,i)=>(i+1)*max) // Initialize an Array of all the multiples of the 'max' number upto 'prodAll'
.find(mulp=>range.every((val)=>mulp%val===0)); // check if any number meets the divisiblable criteria sooner then 'prodAll'
return res;
}
console.log(
smallestCommons([1,13])
)
1条答案
按热度按时间lbsnaicq1#
试试这个:
此版本使用
reduce
函数来迭代范围,并使用当前值和以前计算的lcm来计算最小公倍数。它还使用分离函数(gcd
)来使用Euclid算法计算最大公约数,这更高效。