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;
    }
}

  

原文地址:https://www.cnblogs.com/lzh1043060917/p/12767844.html