当青训营遇上码上掘金
刚看到看到这个题目的时候,感觉题目出的挺好玩,但是误以为题目是要我们数出青豆的数量,顿时觉得有点小难,然后看了一下给的示例,原来是要计算能够存放青豆的单位,这时候好像脑子里面有了一点头绪,所以就选了这个题目。
最开始的思路就是找到两边的柱子,然后计算中间的容量,再减去中间的柱子的长度,后来发现行不通,中间的柱子有可能会比两边的柱子长,然后就有了这个我称之为分段法的思路。
思路
首先我的思路是把这个整体拆分成很多个小部分进行计算容量,可以想一下,最左边的柱子和他右边高于或者等于他的柱子可以形成一个容器,如果右边没有高于等于最左边的柱子了,那么右边最高的柱子可以和最左边的柱子形成一个容器,而容器中间凸出来的柱子则是障碍物,这些障碍物会减少柱子的容量,我们再减去中间这些柱子就可以了。
因此将整体切分的方法就是,从最左边的柱子A开始向右遍历,一旦遇到与其相等或者比其高的柱子B就开始计算B柱子和最左边的柱子A之间的容量,计算完了之后就重置最左边的柱子,把刚刚的B重置为最左边的柱子,然后再从B开始以相同的方法再寻找与B相等或者比B高的柱子,如果B的右侧柱子均比B矮,就找到B右侧柱子中最高的一个柱子C,计算C和B之间的容量,并且重置最左边的柱子为C,再以同样的方法寻找直到最左边的柱子就是最后一根柱子了就停止。这些可以放在一个循环里面完成。