JavaScript實(shí)現(xiàn)twitter puddles算法實(shí)例
今天發(fā)現(xiàn)了一個(gè)挺好玩的算法題,下面是它的算法描述,源自twitter的一道面試題。
twitter puddles 算法描述
先看一副圖

上圖里的數(shù)字是根據(jù)一個(gè)數(shù)組內(nèi)容來(lái)描述的,最后會(huì)根據(jù)每個(gè)數(shù)字的大小來(lái)模擬一道墻的高度,最后生成一面墻,問(wèn)你,當(dāng)下雨的時(shí)候,這面墻可以裝多少水,以1為計(jì)數(shù)單位。
下面是裝完水之后的一面墻的樣子

看完上面上幅圖,感覺(jué)是不是很好玩,確實(shí),下面來(lái)簡(jiǎn)單的分析下它的算法實(shí)現(xiàn)
其實(shí)這個(gè)原理比較簡(jiǎn)單,總共有下面幾個(gè)要點(diǎn):
1.最左邊和最右邊肯定不能裝水
2.裝水的高度依賴(lài)自身左右兩側(cè)內(nèi)兩個(gè)最大值其中的最小值
下面我們用js來(lái)簡(jiǎn)單的實(shí)現(xiàn)它:
/**
* 計(jì)算以數(shù)組項(xiàng)為高度的墻能裝多少水
* 數(shù)組例子 [2,5,1,2,3,4,7,7,6,9]
**/
function getWaterCounts(arg){
var i = 0,
j = 0,
count = 0;
// 第一項(xiàng)和最后一項(xiàng)都得排除
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)前值大于或者等于這個(gè)值什么都不做
if(arg[i] < min){
count += min - arg[i];
}
}
console.log(count);
}
getWaterCounts([2,5,1,2,3,4,7,7,6,9]); // 11
總結(jié)
嘿嘿,實(shí)現(xiàn)是不是挺簡(jiǎn)單的,其實(shí)只要你愿意思考,用js可以實(shí)現(xiàn)很多好玩的東西.
- Javascript中的常見(jiàn)排序算法
- JavaScript blog式日歷控件新算法
- 一個(gè)簡(jiǎn)單的JavaScript 日期計(jì)算算法
- javascript &&和||運(yùn)算法的另類(lèi)使用技巧
- javascript算法題 求任意一個(gè)1-9位不重復(fù)的N位數(shù)在該組合中的大小排列序號(hào)
- Javascript和HTML5利用canvas構(gòu)建Web五子棋游戲?qū)崿F(xiàn)算法
- JavaScript生成GUID的多種算法小結(jié)
- javascript圖片相似度算法實(shí)現(xiàn) js實(shí)現(xiàn)直方圖和向量算法
- js交換排序 冒泡排序算法(Javascript版)
- javascript實(shí)現(xiàn)playfair和hill密碼算法
相關(guān)文章
uniapp實(shí)現(xiàn)app自動(dòng)更新詳細(xì)步驟
這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)app自動(dòng)更新的詳細(xì)步驟,文中給出了詳細(xì)的代碼示例以及圖文教程,對(duì)大家學(xué)習(xí)或者使用uniapp具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-08-08
layui固定下拉框的顯示條數(shù)(有滾動(dòng)條)的方法
今天小編就為大家分享一篇layui固定下拉框的顯示條數(shù)(有滾動(dòng)條)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
uni-app 項(xiàng)目中 “文件查找失?。骸甤rypto-js‘“ 的問(wèn)題及解決方法
在開(kāi)發(fā)使用 uni-app 框架的項(xiàng)目時(shí),遇到依賴(lài)問(wèn)題是常見(jiàn)的,本文將介紹如何解決編譯過(guò)程中出現(xiàn)的 “文件查找失?。骸甤rypto-js’” 錯(cuò)誤,并說(shuō)明這種錯(cuò)誤為什么會(huì)發(fā)生以及如何避免,下面分步驟給大家?guī)?lái)解決方案,感興趣的朋友一起看看吧2024-07-07
javascript之鼠標(biāo)拖動(dòng)位置互換效果代碼
javascript之鼠標(biāo)拖動(dòng)位置互換效果代碼...2007-11-11
JavaScript實(shí)現(xiàn)小程序圖片裁剪功能的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)小程序圖片裁剪功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03
JavaScript中的值類(lèi)型轉(zhuǎn)換介紹
這篇文章主要介紹了JavaScript中的值類(lèi)型轉(zhuǎn)換介紹,本文講解了值類(lèi)型轉(zhuǎn)換規(guī)則、值類(lèi)型轉(zhuǎn)換與比較、顯式類(lèi)型轉(zhuǎn)換、對(duì)類(lèi)型自動(dòng)轉(zhuǎn)換的使用等內(nèi)容,需要的朋友可以參考下2014-12-12
使用Chrome調(diào)試JavaScript的斷點(diǎn)設(shè)置和調(diào)試技巧
這篇文章主要介紹了使用Chrome調(diào)試JavaScript的斷點(diǎn)設(shè)置和調(diào)試技巧,需要的朋友可以參考下2014-12-12

