JavaScript實現(xiàn)twitter puddles算法實例
今天發(fā)現(xiàn)了一個挺好玩的算法題,下面是它的算法描述,源自twitter的一道面試題。
twitter puddles 算法描述
先看一副圖
上圖里的數(shù)字是根據(jù)一個數(shù)組內(nèi)容來描述的,最后會根據(jù)每個數(shù)字的大小來模擬一道墻的高度,最后生成一面墻,問你,當(dāng)下雨的時候,這面墻可以裝多少水,以1為計數(shù)單位。
下面是裝完水之后的一面墻的樣子
看完上面上幅圖,感覺是不是很好玩,確實,下面來簡單的分析下它的算法實現(xiàn)
其實這個原理比較簡單,總共有下面幾個要點:
1.最左邊和最右邊肯定不能裝水
2.裝水的高度依賴自身左右兩側(cè)內(nèi)兩個最大值其中的最小值
下面我們用js來簡單的實現(xiàn)它:
/**
* 計算以數(shù)組項為高度的墻能裝多少水
* 數(shù)組例子 [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;
// 以左右兩邊最大值內(nèi)小的為準(zhǔn)
// 假如當(dāng)前值大于或者等于這個值什么都不做
if(arg[i] < min){
count += min - arg[i];
}
}
console.log(count);
}
getWaterCounts([2,5,1,2,3,4,7,7,6,9]); // 11
總結(jié)
嘿嘿,實現(xiàn)是不是挺簡單的,其實只要你愿意思考,用js可以實現(xiàn)很多好玩的東西.
- Javascript中的常見排序算法
- JavaScript blog式日歷控件新算法
- 一個簡單的JavaScript 日期計算算法
- javascript &&和||運算法的另類使用技巧
- javascript算法題 求任意一個1-9位不重復(fù)的N位數(shù)在該組合中的大小排列序號
- Javascript和HTML5利用canvas構(gòu)建Web五子棋游戲?qū)崿F(xiàn)算法
- JavaScript生成GUID的多種算法小結(jié)
- javascript圖片相似度算法實現(xiàn) js實現(xiàn)直方圖和向量算法
- js交換排序 冒泡排序算法(Javascript版)
- javascript實現(xiàn)playfair和hill密碼算法
相關(guān)文章
淺談JSON.stringify()和JOSN.parse()方法的不同
parse 用于從一個字符串中解析出json 對象而stringify用于從一個對象解析出字符串,這篇文章主要介紹了JSON.stringify()和JOSN.parse()方法的不同,需要的朋友可以參考下2016-08-08Javascript中valueOf與toString區(qū)別淺析
Javascript中valueOf與toString區(qū)別淺析,需要的朋友可以參考一下2013-03-03高性能web開發(fā) 如何加載JS,JS應(yīng)該放在什么位置?
所有瀏覽器在下載JS的時候,會阻止一切其他活動,比如其他資源的下載,內(nèi)容的呈現(xiàn)等等。至到JS下載、解析、執(zhí)行完畢后才開始繼續(xù)并行下載其他資源并呈現(xiàn)內(nèi)容。2010-05-05