当青训营遇上码上掘金
一共有四个主题,我就选择了主题四————攒青豆
问题
先把题目说一说:
现有 n 个宽度为 1 的柱子,给出 n 个非负整数依次表示柱子的高度,排列后如下图所示,此时均匀从上空向下撒青豆,计算按此排列的柱子能接住多少青豆。(不考虑边角堆积)
题解
首先这道题是基于接雨水的模型,我们可以通过使用暴力法直接求解。
因为我们所求的值是通过某根柱子(设为A)的左右两边柱子中最大高度的较小的柱子减去A柱子的高度,那么我们只需要求出每根柱子的左右最大值就可以得出当前该柱的青豆数量。
在这个方法里,首先判断是否存在柱子,或者就是判断是否柱子高度为空(即为0),再通过使用for循环遍历所有柱子的高度,也就是输入数组的所有数字。计算当前柱子的左侧柱子中最大的高度,求解在当前柱子的右边柱子中最大的高度,求解到当前柱子的左右最大高度时,获取左右两侧中较小高度的数据,用该数据减去当前柱子的高度,就是累计到当前柱子可以存储青豆的高度,当到达最后一根柱子时,累加之前所有的结果,便是接住青豆的最大量。