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
Nov 25 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
Oct 20 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
May 11 Javascript
排序算法的javascript实现与讲解(99js手记)
Sep 28 Javascript
详解Webwork中Action 调用的方法
Feb 02 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
对javascript继承的理解
Oct 11 Javascript
原生js封装自定义滚动条
Mar 24 Javascript
使用js获取伪元素的content实例
Oct 24 Javascript
Jquery实现无缝向上循环滚动列表的特效
Feb 13 jQuery
highcharts.js数据绑定方式代码实例
Nov 13 Javascript
JS document form表单元素操作完整示例
Jan 13 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(一)
2012/03/21 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
JScript的条件编译
2007/05/29 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
python处理中文编码和判断编码示例
2014/02/26 Python
python操作xml文件示例
2014/04/07 Python
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Python玩转Excel的读写改实例
2019/02/22 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
单位刻章介绍信范文
2014/01/11 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
师德先进个人材料
2014/12/20 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android