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输出阴历、阳历、年份、月份、周示例代码
Jan 29 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
直接拿来用的15个jQuery代码片段
Sep 23 Javascript
AngularJS基础 ng-open 指令简单实例
Aug 02 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
Vue 滚动行为的具体使用方法
Sep 13 Javascript
JavaScript执行环境及作用域链实例分析
Aug 01 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
Jul 03 Javascript
vue开发拖拽进度条滑动组件
Sep 21 Javascript
解决vuex数据页面刷新后初始化操作
Jul 26 Javascript
关于ES6尾调用优化的使用
Sep 11 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
正则表达式语法
2006/10/09 Javascript
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
php获取apk包信息的方法
2014/08/15 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
大学校运会广播稿
2014/02/03 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL