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 相关文章推荐
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
jquery实现手风琴效果
Nov 20 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
bootstrap表格分页实例讲解
Dec 30 Javascript
AngularJS Select(选择框)使用详解
Jan 18 Javascript
vue构建单页面应用实战
Apr 10 Javascript
angular4 JavaScript内存溢出问题
Mar 06 Javascript
vue click.stop阻止点击事件继续传播的方法
Sep 04 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
Jun 18 jQuery
前端JS获取URL参数的4种方法总结
Apr 05 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
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
Python实现选择排序
2017/06/04 Python
python使用mysql的两种使用方式
2018/03/07 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
解读python logging模块的使用方法
2018/04/17 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
python调用百度API实现人脸识别
2020/11/17 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
建房协议书
2014/04/11 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
租房协议书
2014/09/12 职场文书
2016国培学习心得体会
2016/01/08 职场文书
2019年教师入党申请书
2019/06/27 职场文书