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 相关文章推荐
event.srcElement+表格应用
Aug 29 Javascript
js中cookie的使用详细分析
May 28 Javascript
js特殊字符转义介绍
Nov 05 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
js获取页面description的方法
May 21 Javascript
node.js+express制作网页计算器
Jan 17 Javascript
javascript每日必学之封装
Feb 23 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
Dec 28 Javascript
bootstrap table服务端实现分页效果
Aug 10 Javascript
结合mint-ui移动端下拉加载实践方法总结
Nov 08 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
Mar 20 Javascript
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遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
smarty实现多级分类的方法
2014/12/05 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
javascript 动态生成私有变量访问器
2009/12/06 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
python生成式的send()方法(详解)
2017/05/08 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
租赁协议书
2015/01/27 职场文书
创业计划之特色精品店
2019/08/12 职场文书
MySQL数据库事务的四大特性
2022/04/20 MySQL