JavaScript實現twitter puddles演算法執行個體,twitterpuddles

來源:互聯網
上載者:User

JavaScript實現twitter puddles演算法執行個體,twitterpuddles

今天發現了一個挺好玩的演算法題,下面是它的演算法描述,源自twitter的一道面試題。

twitter puddles 演算法描述

先看一副圖

裡的數字是根據一個數組內容來描述的,最後會根據每個數位大小來類比一道牆的高度,最後產生一面牆,問你,當下雨的時候,這面牆可以裝多少水,以1為計數單位。

下面是裝完水之後的一面牆的樣子

看完上面上幅圖,感覺是不是很好玩,確實,下面來簡單的分析下它的演算法實現

其實這個原理比較簡單,總共有下面幾個要點:

1.最左邊和最右邊肯定不能裝水
2.裝水的高度依賴自身左右兩側內兩個最大值其中的最小值

下面我們用js來簡單的實現它:

複製代碼 代碼如下:
/**
*  計算以數組項為高度的牆能裝多少水
*  數組例子 [2,5,1,2,3,4,7,7,6,9]
**/
function getWaterCounts(arg){
    var i = 0,
        j = 0,
        count = 0;
    // 第一項和最後一項都得排除
    for(i = 1; i < arg.length - 1; i++){
        var left = Math.max.apply(null, arg.slice(0, i + 1));
        var right = Math.max.apply(null, arg.slice(i, arg.length));
        var min = left >= right ? right : left;
        // 以左右兩邊最大值內小的為準
        // 假如當前值大於或者等於這個值什麼都不做
        if(arg[i] < min){
            count += min - arg[i];
        }
    }
    console.log(count);
}
getWaterCounts([2,5,1,2,3,4,7,7,6,9]); // 11

總結

嘿嘿,實現是不是挺簡單的,其實只要你願意思考,用js可以實現很多好玩的東西.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.