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 相关文章推荐
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
Feb 03 Javascript
基于jquery完美拖拽,可返回拖动轨迹
Mar 29 Javascript
jQuery隔行变色与普通JS写法的对比
Apr 21 Javascript
如何判断微信内置浏览器(通过User Agent实现)
Sep 01 Javascript
使用Angular.js实现简单的购物车功能
Nov 21 Javascript
微信小程序加载更多 点击查看更多
Nov 29 Javascript
JavaScript利用Date实现简单的倒计时实例
Jan 12 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 Javascript
详解在vue-test-utils中mock全局对象
Nov 07 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
Feb 14 Javascript
JavaScript实现简单拖拽效果
Sep 15 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
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
PHP7 标准库修改
2021/03/09 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
JS跨域问题详解
2014/11/25 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
python一键升级所有pip package的方法
2017/01/16 Python
Python numpy 常用函数总结
2017/12/07 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
详解Python发送email的三种方式
2018/10/18 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
人事助理自荐信
2014/02/02 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
React 高阶组件HOC用法归纳
2021/06/13 Javascript