30-seconds-of-code學(xué)習(xí)筆記(2

arrayGcd

求最大公約數(shù)

const arrayGcd = arr =>{
                    const gcd = (x, y) => !y ? x : gcd(y, x % y);
                    return arr.reduce((a,b) => gcd(a,b));
}
// arrayGcd([1,2,3,4,5]) -> 1
// arrayGcd([4,8,12]) -> 4

常見(jiàn)面試題 上面用的輾轉(zhuǎn)相除法,即相互取余,知道最后一方為0,取另一方。

麻煩點(diǎn)的寫(xiě)法

var arrayGcd = function(arr) {
    function gcd(x, y) {
        return !y ? x : gcd(y, x % y)
    }
    var result = arr[0];
    for(var i = 0, length = arr.length; i < length; i++) {
        result = gcd(result, arr[i])
    }
    return result
}

還有一種方法叫做更相減損法 先兩邊共同把公約數(shù)2除完,然后相減與最小數(shù)比較 知道相等 在算出最先出來(lái)的2余其乘積

var arrayGcd = function(arr) {
    function gcd(x, y, z = 0) {
        if(!(x % 2 || y % 2)) {
            return gcd(x/2, y/2, z+1)
        }
        return x === y ? x*Math.pow(2, z) : gcd(Math.min(x, y), Math.abs(x - y), z)
    }
    var result = arr[0];
    for(var i = 0, length = arr.length; i < length; i++) {
        result = gcd(result, arr[i])
    }
    return result
}

我們?cè)囍屗?jiǎn)化一點(diǎn)

const arrayGcd = (arr) => {
    const gcd = (x, y, z = 1) => x === y ? x * z : x % 2 || y % 2 ? gcd(Math.min(x, y), Math.abs(x - y), z) : gcd(x/2, y/2, z*2)
    return arr.reduce((a,b) => gcd(a,b));
}

嗯··· 還是有點(diǎn)長(zhǎng)····

arrayLcm

最小公倍數(shù)
應(yīng)用定理 最大公約數(shù) * 最小公倍數(shù) = 兩數(shù)乘積

所以

const arrayLcm = arr =>{
                    const gcd = (x, y) => !y ? x : gcd(y, x % y);
                    const lcm = (x, y) => (x*y)/gcd(x, y); 
                    return arr.reduce((a,b) => lcm(a,b));
}

這個(gè)就簡(jiǎn)單了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章數(shù)和數(shù)的運(yùn)算 一概念 (一)整數(shù) 1整數(shù)的意義 自然數(shù)和0都是整數(shù)。 2自然數(shù) 我們?cè)跀?shù)物體的時(shí)候,用來(lái)表示...
    meychang閱讀 2,846評(píng)論 0 5
  • 小升初的過(guò)程中,競(jìng)賽成績(jī)能起到相當(dāng)大的作用,談到競(jìng)賽就離不開(kāi)奧數(shù)。以下是小學(xué)奧數(shù)題知識(shí)點(diǎn)大匯總: 1.和差倍問(wèn)題 ...
    滬江中小幼閱讀 1,226評(píng)論 0 7
  • 新年第一天開(kāi)篇,貼上新年目計(jì)劃與目標(biāo),在此記錄個(gè)人的成長(zhǎng)及親子教育的感悟記錄。
    愛(ài)毅愛(ài)子閱讀 208評(píng)論 0 0
  • 屢次—— 九層龍骨剖開(kāi)經(jīng)幡命裡的層次 像紅色的火苗暗搓自己寬厚的手掌 依然明朗、高昂 經(jīng)幡是從不善良或者黑暗的木 ...
    鐵鉦閱讀 404評(píng)論 15 19
  • 1.找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來(lái),不要和那些不需要變化的代碼混在一起 2.針對(duì)接口編程,而不是針對(duì)實(shí)...
    freezml閱讀 191評(píng)論 0 0

友情鏈接更多精彩內(nèi)容