【发布时间】:2021-04-01 20:27:39
【问题描述】:
给定 n 个非负整数表示海拔图,其中每个条的宽度为 1,计算下雨后它可以捕获多少水。
示例: 输入:高度 = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 说明:上面的高程图(黑色部分)用数组[0,1,0,2,1,0,1,3,2,1,2,1]表示。在这种情况下,有 6 个单位的雨水(蓝色部分)被截留。
**Constraints**:
n == height.length
0 <= n <= 3 * 104
0 <= height[i] <= 105
问题在于,当输入为 [2,0,2] 时输出 0,但代码应将索引 1 设置为 leftMax 为 2,rightMax 为 2,因此 2-0=2应该是输出
class Solution {
public int trap(int[] height) {
if(height == null || height.length == 0){
return 0;
}
int ans = 0;
int size = height.length;
int[] leftMax = new int[size];
int[] rightMax = new int[size];
leftMax[0] = height[0];
for(int i = 1; i < size; i++){
leftMax[i] = Math.max(leftMax[i-1],height[i]);
}
rightMax[0] = height[size-1];
for(int i = size-2; i >= 0; i--){
rightMax[i] = Math.max(rightMax[i+1],height[i]);
}
for(int i = 1; i < size-1; i++){
ans+= Math.min(leftMax[i],rightMax[i])-height[i];
}
return ans;
}
}
【问题讨论】:
-
它是否适用于其他更复杂的示例?
-
@luk2302 是的,它似乎确实可以处理复杂的示例
-
我认为您的
rightMax[0]初始化应该是rightMax[size-1]一个。 -
@luk2302 我试试看,谢谢