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 相关文章推荐
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 Javascript
基于javascript制作微博发布栏效果
Apr 04 Javascript
浅谈移动端之js touch事件 手势滑动事件
Nov 07 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
Nov 30 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
Apr 16 Javascript
Node.js中 __dirname 的使用介绍
Jun 19 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
简单快速的实现js计算器功能
Aug 17 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
CKeditor4 字体颜色功能配置方法教程
Jun 26 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中对数据库操作的封装
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
php intval的测试代码发现问题
2008/07/27 PHP
php flush类输出缓冲剖析
2008/10/19 PHP
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
详解a++和++a的区别
2017/08/30 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Python if语句知识点用法总结
2018/06/10 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
小学生作文评语集锦
2014/12/25 职场文书
保送生自荐信
2015/03/06 职场文书
离婚案件原告代理词
2015/05/23 职场文书