class Solution {
public int trap(int[] height) {
//。。。。。。困难题果然困难。。。。。。
//思路:每一个位置能够装雨水的格子数等于该位置两边的最大高度之间的最小值-当前位置的高度,
//最后结果若为正数即为当前位置能装的雨水数,否则就表明当前位置不能装雨水。
//使用动态规划的思想,将每一个位置的两边的最大高度分别保存到两个数组当中(以空间换时间)
//1.计算每个位置的左边最大高度
int len = height.length;
int[] leftMaxHeight = new int[len];
leftMaxHeight[0] = height[0];
for(int i = 1;i < len;i++)
leftMaxHeight[i] = Math.max(leftMaxHeight[i-1],height[i]);
//2.计算每个位置的右边最大高度
int[] rightMaxHeight = new int[len];
rightMaxHeight[len-1] = height[len-1];
for(int i = len-2;i >= 0;i--)
rightMaxHeight[i] = Math.max(rightMaxHeight[i+1],height[i]);
//3.累加每个位置能装雨水的数并得到最终结果
int result = 0;
for(int i = 0;i < len;i++)
result += Math.min(leftMaxHeight[i],rightMaxHeight[i]) - height[i];
return result;
}
}
leetcode42. 接雨水
最新推荐文章于 2024-06-15 23:36:03 发布