42. 接雨水

88 阅读1分钟

题目描述:

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

image.png

解题思路一:暴力法

1、使用一个变量 ans 用来记录存水量

2、然后从索引为 1 的那个柱子开始进行遍历,因为索引为 0 的柱子存不了水,分别从当前的柱子向左向右进行遍历找到左右两端的最长的柱子 记作 max_left、max_right

3、由于能存下多少水取决于最短的一根柱子,所以要在左右两个柱子中找到比较短的拿一根 ,然后减去当前位置柱子的高度就是这个位置上的存水量。然后进行依次累加.

public static int trap(int[] height) {
    int ans = 0;
    int size = height.length;
    for (int i=1;i<size-1;i++){
        //分别找到左右两边最高的柱子
        int max_left = 0;
        int max_right = 0;
        for (int j = i;j>=0;j--){
            max_left = Math.max(max_left,height[j]);
        }
        for (int j = i;j<size;j++){
            max_right = Math.max(max_right,height[j]);
        }
        ans+=Math.min(max_left,max_right) - height[i];
    }
    return ans;
}

暂时只学会了暴力解...