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 相关文章推荐
基于jquery库的tab新形式使用
Nov 16 Javascript
JS简单的图片放大缩小的两种方法
Nov 11 Javascript
JavaScript中的getTime()方法使用详解
Jun 10 Javascript
js实现分割上传大文件
Mar 09 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
Jul 27 Javascript
AngularJS的脏检查深入分析
Apr 22 Javascript
angularjs实现分页和搜索功能
Jan 03 Javascript
vue-cli项目中使用Mockjs详解
May 14 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
详解Vue调用手机相机和相册以及上传
May 05 Javascript
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
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
玛琪朵 Macchiato
2021/03/03 咖啡文化
使用php测试硬盘写入速度示例
2014/01/27 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
JavaScript 大数据相加的问题
2011/08/03 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python3对接mysql数据库实例详解
2019/04/30 Python
python版DDOS攻击脚本
2019/06/12 Python
Python如何调用外部系统命令
2019/08/07 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
2015年度电厂个人工作总结
2015/05/13 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server
2022年显卡天梯图(6月更新)
2022/06/17 数码科技