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 相关文章推荐
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
Oct 13 Javascript
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
Aug 11 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
jQuery中选择器的基础使用教程
May 23 Javascript
JS实现鼠标滑过显示边框的菜单效果
Sep 21 Javascript
jQuery命名空间与闭包用法示例
Jan 12 Javascript
layer.open关闭父窗口 以及调用父页面的方法
Aug 17 Javascript
vue实现手机端省市区区域选择
Sep 27 Javascript
原生JS无缝滑动轮播图
Oct 22 Javascript
vue实现移动端input上传视频、音频
Aug 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的FTP学习(二)
2006/10/09 PHP
PHP个人网站架设连环讲(四)
2006/10/09 PHP
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
告诉大家什么是JSON
2008/06/10 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
js图片预加载示例
2014/04/30 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
python Django连接MySQL数据库做增删改查
2013/11/07 Python
python中base64加密解密方法实例分析
2015/05/16 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
python写一个随机点名软件的实例
2019/11/28 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
python 5个实用的技巧
2020/09/27 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
Gap英国官网:Gap UK
2018/07/18 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
两则小学生的自我评价分享
2013/11/14 职场文书
军训心得体会
2013/12/31 职场文书
银行学习十八大感想
2014/01/11 职场文书
六十大寿答谢词
2014/01/12 职场文书
食堂个人先进事迹
2014/01/22 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
好媳妇事迹材料
2014/12/24 职场文书
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers