JavaScript实现twitter puddles算法实例

 更新时间:2014年12月06日 11:18:16   投稿:junjie  
这篇文章主要介绍了JavaScript实现twitter puddles算法实例,本文源自twitter的一道面试题,本文使用js解开了这首题,需要的朋友可以参考下

今天发现了一个挺好玩的算法题,下面是它的算法描述,源自twitter的一道面试题。

twitter puddles 算法描述

先看一副图

上图里的数字是根据一个数组内容来描述的,最后会根据每个数字的大小来模拟一道墙的高度,最后生成一面墙,问你,当下雨的时候,这面墙可以装多少水,以1为计数单位。

下面是装完水之后的一面墙的样子

看完上面上幅图,感觉是不是很好玩,确实,下面来简单的分析下它的算法实现

其实这个原理比较简单,总共有下面几个要点:

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可以实现很多好玩的东西.

相关文章

  • 浅谈JSON.stringify()和JOSN.parse()方法的不同

    浅谈JSON.stringify()和JOSN.parse()方法的不同

    parse 用于从一个字符串中解析出json 对象而stringify用于从一个对象解析出字符串,这篇文章主要介绍了JSON.stringify()和JOSN.parse()方法的不同,需要的朋友可以参考下
    2016-08-08
  • 关于微信小程序登录的那些事

    关于微信小程序登录的那些事

    这篇文章主要给大家介绍了关于微信小程序登录的那些事,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 输入npm run xxx后执行原理深入解析

    输入npm run xxx后执行原理深入解析

    这篇文章主要为大家介绍了输入npm run xxx后执行原理深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Javascript中valueOf与toString区别浅析

    Javascript中valueOf与toString区别浅析

    Javascript中valueOf与toString区别浅析,需要的朋友可以参考一下
    2013-03-03
  • 高性能web开发 如何加载JS,JS应该放在什么位置?

    高性能web开发 如何加载JS,JS应该放在什么位置?

    所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。至到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。
    2010-05-05
  • JS实现横向跑马灯效果代码

    JS实现横向跑马灯效果代码

    这篇文章主要介绍了JS实现横向跑马灯效果代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • js中的this关键字详解

    js中的this关键字详解

    this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,下面分四种情况,详细讨论this的用法,感兴趣的朋友可以了解下
    2013-09-09
  • JavaScript实现打地鼠游戏

    JavaScript实现打地鼠游戏

    这篇文章主要为大家详细介绍了JavaScript实现打地鼠游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Javascript设计模式之观察者模式(推荐)

    Javascript设计模式之观察者模式(推荐)

    观察者模式有时也称为发布--订阅模式,在观察者模式中,有一个观察者可以管理所有的目标,等到有状态发生改变的时候发出通知
    2016-03-03
  • 手把手教你在微信小程序中使用three.js(保姆级教程)

    手把手教你在微信小程序中使用three.js(保姆级教程)

    Three.js是一款运行在浏览器中的3D引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象,下面这篇文章主要给大家介绍了关于如何在微信小程序中使用three.js的保姆级教程,需要的朋友可以参考下
    2023-03-03

最新评论