JavaScript实现twitter puddles算法实例


Posted in Javascript onDecember 06, 2014

今天发现了一个挺好玩的算法题,下面是它的算法描述,源自twitter的一道面试题。

twitter puddles 算法描述

先看一副图

JavaScript实现twitter puddles算法实例

上图里的数字是根据一个数组内容来描述的,最后会根据每个数字的大小来模拟一道墙的高度,最后生成一面墙,问你,当下雨的时候,这面墙可以装多少水,以1为计数单位。

下面是装完水之后的一面墙的样子

JavaScript实现twitter puddles算法实例

看完上面上幅图,感觉是不是很好玩,确实,下面来简单的分析下它的算法实现

其实这个原理比较简单,总共有下面几个要点:

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可以实现很多好玩的东西.

Javascript 相关文章推荐
JS 按钮点击触发(兼容IE、火狐)
Aug 07 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
May 27 Javascript
不到30行JS代码实现Excel表格的方法
Nov 15 Javascript
解析javascript中鼠标滚轮事件
May 26 Javascript
推荐10 个很棒的 jQuery 特效代码
Oct 04 Javascript
javascript图片滑动效果实现
Jan 28 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
webpack独立打包和缓存处理详解
Apr 03 Javascript
玩转Koa之核心原理分析
Dec 29 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
javascript利用canvas实现鼠标拖拽功能
Jul 23 Javascript
Vue Element plus使用方法梳理
Dec 24 Vue.js
JavaScript实现的一个计算数字步数的算法分享
Dec 06 #Javascript
angularjs中的e2e测试实例
Dec 06 #Javascript
angularjs中的单元测试实例
Dec 06 #Javascript
angularjs指令中的compile与link函数详解
Dec 06 #Javascript
angularjs的一些优化小技巧
Dec 06 #Javascript
JavaScript开发人员的10个关键习惯小结
Dec 05 #Javascript
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 #Javascript
You might like
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
Django logging配置及使用详解
2019/07/23 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
进程的查看和调度分别使用什么命令
2013/12/14 面试题
测绘工程个人的自我评价
2013/11/23 职场文书
单位工作证明范文
2014/09/14 职场文书
户外亲子活动总结
2015/05/08 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript