今天我发现了一个有趣的算法问题,下面是它的算法描述,来自twitter的采访。

Twitter水坑算法描述

先看一幅画



上图中的数字是根据数组的内容来描述的。最后,根据每一个数字的大小来模拟墙的高度。最后,会产生一堵墙,问你下雨时墙能容纳多少水,其中1是计算单位。

下面是水被填满后的一堵墙的出现。



看了上面的图片后,感觉很有意思,下面是对它的算法实现的简单分析。

事实上,这个原则相对简单,主要有几点:

1。左边和右边一定没有水。

2。水的高度取决于其左右两侧两个最大值的最小值。

这里我们使用js来简单地实现它:

复制代码代码如下所示:



*计算有多少水可以用一个高数组项填充墙

*阵列实例2,5,1,2,3,4,7,7,6,9 } {

**

功能getwatercounts(arg){

var I=0,

j=0,

计数= 0;

第一个和最后一个项目被排除在外。

为(i = 1;i < arg.length - 1;i++){

VaR左= math.max.apply(null,arg.slice(0,i + 1));

VaR对= math.max.apply(null,arg.slice(我精。长度));

var右:左=左=右;

最大值的左、右两边较小。

如果当前值大于或等于该做什么的值

如果({ { } < <分钟){

计数=最小值;

}

}

console.log(计数);

}

getwatercounts({ 2,5,1,2,3,4,7,7,6,9 }); / / 11



总结

嘿嘿,实现不是很简单,其实只要你想,用js就能实现很多好玩的东西。