给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例 1:
输入:height = [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 个单位的雨水(蓝色部分表示雨水)。
示例 2:
输入:height = [4,2,0,3,2,5] 输出:9
解题方法:(相向双指针+前后缀分离)
-
采用左右双指针,来遍历数组,并且不断更新前后缀的最大值。
-
比较前后缀的值哪个小,哪个小就用哪个减去当前的指针索引,并加到结果中。
class Solution {
public int trap(int[] height) {
int n = height.length;
int left = 0;
int right = n - 1;
int ans = 0;
int pre_max = 0;
int suf_max = 0;
while (left < right) {
pre_max = Math.max(pre_max, height[left]);
suf_max = Math.max(suf_max, height[right]);
if (pre_max < suf_max) {
ans += pre_max - height[left];
left += 1;
} else {
ans += suf_max - height[right];
right -= 1;
}
}
return ans;
}
}
标签:pre,suf,right,java,int,max,雨水,height,leetcode
From: https://blog.csdn.net/W_L_MM/article/details/145221082