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 题型问答有答案参考
Feb 17 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
Apr 27 Javascript
基于Jquery实现键盘按键监听
May 11 Javascript
用C/C++来实现 Node.js 的模块(二)
Sep 24 Javascript
Jquery实现仿腾讯微博发表广播
Nov 17 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
JavaScript实现99乘法表及隔行变色实例代码
Feb 24 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
Jan 22 Javascript
loading动画特效小结
Jan 22 Javascript
React学习之事件绑定的几种方法对比
Sep 24 Javascript
详解JavaScript中精度失准问题及解决方法
Feb 04 Javascript
Vue.js中Line第三方登录api的实现代码
Jun 29 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 mysql数据库操作类
2008/06/04 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
解密Python中的描述符(descriptor)
2015/06/03 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
python requests.post带head和body的实例
2019/01/02 Python
python重试装饰器的简单实现方法
2019/01/31 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Python JSON编解码方式原理详解
2020/01/20 Python
python怎么判断模块安装完成
2020/06/19 Python
python模块内置属性概念及实例
2021/02/18 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
金融行业务员的自我评价
2013/12/13 职场文书
安全生产管理责任书
2014/04/16 职场文书
班主任评语大全
2014/04/26 职场文书
大学生见习报告总结
2014/11/04 职场文书
订货会邀请函
2015/01/31 职场文书
退伍军人感言
2015/08/01 职场文书
golang中的struct操作
2021/11/11 Golang