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将数据库中的TEXT类型数据动态赋值到TEXTAREA中
Apr 20 Javascript
javascript prototype原型操作笔记
Dec 07 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
Aug 09 Javascript
js获取url参数代码实例分享(JS操作URL)
Dec 13 Javascript
Javascript仿PHP $_GET获取URL中的参数
May 12 Javascript
JavaScript获取当前网页最后修改时间的方法
Apr 03 Javascript
js实现的tab标签切换效果代码分享
Aug 25 Javascript
Jquery实现$.fn.extend和$.extend函数
Apr 14 Javascript
微信小程序如何获取openid及用户信息
Jan 26 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
详解vue-cli脚手架中webpack配置方法
Aug 22 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 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
第十一节 重载 [11]
2006/10/09 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP 万年历实现代码
2012/10/18 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
stripos函数知识点实例分享
2019/02/11 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
Python基于execjs运行js过程解析
2020/11/27 Python
员工拾金不昧表扬信
2014/01/09 职场文书
建议书的格式
2014/05/12 职场文书
消防志愿者活动方案
2014/08/23 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
大学生作弊检讨书
2014/09/11 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
Python集合set()使用的方法详解
2022/03/18 Python