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

twitter puddles 算法描述

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

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

  • 最左边和最右边肯定不能装水
  • 装水的高度依赖自身左右两侧内两个最大值其中的最小值

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

一个twitter puddles的算法实现相关推荐

  1. 根据twitter的snowflake算法生成唯一ID

    C#版本 /// <summary>/// 根据twitter的snowflake算法生成唯一ID/// snowflake算法 64 位/// 0---0000000000 000000 ...

  2. 基于Twitter的Snowflake算法实现的分布式ID生成器

    /*** 基于Twitter的Snowflake算法实现的分布式ID生成器* ------------------------------------------------------------- ...

  3. snowflake做主键 自增_GitHub - MarvinYu/snowflake: Twitter的雪花算法(snowflake)分布式自增ID...

    snowflake 分布式id生成算法的有很多种,Twitter的雪花算法(SnowFlake)就是其中经典的一种. SnowFlake算法的优点: 生成ID时不依赖于数据库,完全在内存生成,高性能高 ...

  4. 实验三:实现一个大素数生成算法

    一.实验内容 掌进一步掌握大素数分解的一般原理和实现方法.能用间接方法实现大素数分解.用代码实现Solovay-Strassen素性测试法或Miller-Rabin素性测试法. 二.分实现一个大素数生 ...

  5. 大数据DDos检测——DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然! 和一个句子的分词算法CRF没有区别!...

    DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然!--和一个句子的分词算法CRF没有区别! 注:传统DDos检测直接基于IP数据发送流量来识别 ...

  6. 一个标准的PID算法

    一个标准的PID算法 #include<reg51.h> #include<intrins.h> #include<math.h> #include<stri ...

  7. lru算法实现 redis_使用数组与双向链表实现一个简单的LRU算法

    什么是LRU算法? redis大家都玩过吧,你们好奇redis内存数据存满之后会发生什么吗?抛出异常?禁止使用?还是删除数据?其实redis设计了一种内润淘汰机制. noeviction(默认策略): ...

  8. php排序地区,怎么在php项目中实现一个地区分类排序算法

    怎么在php项目中实现一个地区分类排序算法 发布时间:2020-12-30 16:11:30 来源:亿速云 阅读:86 作者:Leah 怎么在php项目中实现一个地区分类排序算法?相信很多没有经验的人 ...

  9. 从零实现一个3D目标检测算法(3):PointPillars主干网实现(持续更新中)

    在上一篇文章<从零实现一个3D目标检测算法(2):点云数据预处理>我们完成了对点云数据的预处理. 从本篇文章,我们开始正式实现PointPillars网络,我们将按照本系列第一篇文章介绍的 ...

  10. 从零实现一个3D目标检测算法(2):点云数据预处理

    在上一篇文章<从零实现一个3D目标检测算法(1):3D目标检测概述>对3D目标检测研究现状和PointPillars模型进行了介绍,在本文中我们开始写代码一步步实现PointPillars ...

最新文章

  1. To connect to files.phpmyadmin.net insecurely, use `--no-check-certificate‘
  2. python判断两个值是否相等_Python--比较两个字典部分value是否相等
  3. Ubuntu终止进程的方法(kill、pkill、killall)
  4. 【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
  5. PV、UV、IP的区别
  6. 【学术相关】研究生第一篇学术论文常犯问题总结
  7. 【运筹与优化】单纯形法解线性规划问题(matlab实现)
  8. mysql 只开放某个表_MySQL只恢复某个库或某张表
  9. java7 完整版_21天学通Java 第7版 ([美]罗格斯-卡登海德) 中文pdf完整版[23MB]
  10. 1997年考研数学一解析pdf
  11. Win10修改登录/锁屏界面背景
  12. 手把手教你写网络爬虫:Web应用的漏洞检测实战篇!
  13. [转](42)驱动中使用全局变量
  14. [渝粤教育] 上海师范大学 英汉互译 参考 资料
  15. RMAN CROSSCHECK命令 说明
  16. Google Earth网页版初探
  17. oracle数据库ORA-报错大全
  18. 计算机网络原理第二章答案
  19. ai画面怎么调大小_AI中怎么才能把图像等比例扩大或缩小尺寸?
  20. 高中生活--第5篇--学英语的故事(四大难题)

热门文章

  1. dilated conv带孔卷积、pooling层提高感受野 反卷积 的理解
  2. 7-4 哈夫曼编码 (30分)
  3. Unity太空大战游戏-Socket网络通信教学示例
  4. qt quick-QML虚拟软键盘V2版本(手机键盘弹出机制)-支持换肤、动态加载移除语言
  5. C++ Primer 第四章学习 —— “表达式”
  6. 推荐6款习惯养成APP,送给想要提升自己的人!
  7. JS 基础: 你真的了解 console 吗?
  8. JavaWeb学习-动态代理-2-invoke()方法和动态代理Waiter类练习
  9. 如何识别一加6手机图片中的文字?
  10. word里面的ctrl+z快捷键无效|ctrl+z 无效 最新解决方法