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 asp.net 获取当前超链接中的文本
Apr 14 Javascript
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
jquery获取焦点和失去焦点事件代码
Apr 21 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
Nov 13 Javascript
原生js结合html5制作简易的双色子游戏
Mar 30 Javascript
基于jquery实现即时检查格式是否正确的表单
May 06 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
JS实现队列的先进先出功能示例
May 10 Javascript
vue+mock.js实现前后端分离
Jul 24 Javascript
教你搭建按需加载的Vue组件库(小结)
Jul 29 Javascript
微信小程序 WXML节点信息查询详解
Jul 29 Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 18 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实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
利用PHP实现短域名互转
2013/07/05 PHP
php生成图片缩略图的方法
2015/04/07 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Django REST 异常处理详解
2020/07/15 Python
python 5个顶级异步框架推荐
2020/09/09 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
好书伴我成长演讲稿
2014/05/14 职场文书
家长评语怎么写
2014/12/30 职场文书
英文感谢信范文
2015/01/21 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL