42-接雨水

一个位置是否能接雨水,取决于这个下标a的左右两侧,是否存在比a的高度更高的下标。所以找到当前元素a能存多少水,步骤分两步
1.找到每个元素(头尾元素不算)左侧高度最高的下标L。和每个元素右侧高度最高的下标R。
2.找L与R的高度的最小值,假设左边更低
3.nums[L]如果大于nums[a],可以存储水,容量等于L高度减去a高度。
class Solution {
public int trap(int[] height) {
int[] max_left=new int[height.length];
int[] max_right=new int[height.length];
int sum=0;
for(int i=1;i<height.length-1;i++)
{
max_left[i]=Math.max(max_left[i-1],height[i-1]);
}
for(int i=height.length-2;i>=0;i--)// =0?
{
max_right[i]=Math.max(max_right[i+1],height[i+1]);
}
for(int i=1;i<height.length-1;i++)
{
int min=Math.min(max_left[i],max_right[i]);
if(min>height[i])
{
sum=sum+(min-height[i]);
}
}
return sum;
}
}

浙公网安备 33010602011771号