题目:给定 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 个单位的雨水(蓝色部分表示雨水)。
分析:观察一下上图,我们不难发现想要接到雨水,那就需要接水的这个地方左右两边要有一边大于自己的高度,另一边小于或等于自己的高度才能接到水。那么对于数组中每个元素对应的位置能接多少雨水应该等于这个元素左边和右边的两个最大元素中比较小的那个减去自己的值。
解法一:暴力
public class Solution {
public int trap(int[] height) {
if (height == null || height.length == 0)
return 0;
int and = 0;
int size = height.length;
for (int i = 1; i < size - 1; i++) {
//第一个元素和最后一个元素不用判断
int max_left = 0, max_right =