LeetCode 题解:42. 接雨水,动态规划,JavaScript,详细注释
原题链接:https://leetcode-cn.com/problems/trapping-rain-water/
解题思路路:
假设每个柱子都是一个桶,我们只要知道每个桶的左右桶壁高度的最小值,再减去当前桶底的高度,就可以知道当前桶的装水量,再将每个桶的装水量加起来,即可知道总的装水量。
使用两次遍历分别查找桶的最高左桶壁和右桶壁。
例如在查找第i个桶的左桶壁时,
maxLeft[i-1]
已保存了从0到i-1桶的最大左桶壁,而桶i的左侧是height[i-1]
,它也是桶壁的候选,因此需要求Math.max(maxLeft[i - 1], height[i - 1])
。由于左右边界都无法装水,因此要设置左右两侧桶的桶壁为0。
在第三次遍历只要计算桶壁与桶底只差,即可知道每个桶可装水量,将其加总即为结果。
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/294ab0eaa21771516ce50a678】。文章转载请联系作者。
评论