今天发现一个有趣的算法问题。这是它的算法描述,来自推特上的一个采访问题。
推特水坑算法描述
先看图
上图中的数字是根据数组的内容描述的。最后,将根据每个数字的大小来模拟墙的高度。最后,将生成一面墙。问你这墙下雨的时候能装多少水,以1为计数单位。
这是装水后墙的样子
看完上面这张图,感觉好玩吗?确实,让我们简单分析一下它的算法实现
其实这个原理比较简单,总共有以下几点:
1.最左侧和最右侧不得含水。2.水荷载的高度取决于其左侧和右侧两个最大值中的最小值
让我们使用js简单地实现它:
复制代码如下:/***计算以数组项为高度的墙能装多少水*数组示例[2,5,1,2,3,4,7,7,6,9]* */Function getWaters(arg){ var I=0,j=0,count=0;//第一项和最后一项必须排除(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=左=右?右:左;//取左右两边中较小的一个。//如果当前值大于或等于该值,则在(arg[i] min){ count=min-arg[i]时不执行任何操作;} } console.log(计数);} getwatchunts([2,5,1,2,3,4,7,7,6,9]);//11
摘要
呵呵,容易实现吗?其实只要你愿意思考,用js可以实现很多有趣的事情。