思路:
1.首先找到最高的那个柱子,即从height数组中找到最大值和最大值的下标。
2.按照最高的柱子分成左右两部分。
左边的定柱left是[0,max-1],迭代是[left+1,max]
右边定柱right是从右往左的height_size-1到max+1,迭代右到左right到max
3.如果迭代里有比定柱小的就有雨水,直接res+二者差值。
4.如果迭代里有比定柱大或者等于的,迭代出来的将成为新的定柱。
C++代码如下:
class Solution {
public:
int trap(vector<int>& height) {
int res = 0;
int maxValue = -1;
int maxAddr =0;
//求数组最大值及下标
for(int i = 0;i<height.size();i++){
if(height[i]>=maxValue){
maxValue=height[i];
maxAddr=i;
}
}
//左半部分处理
for(int left=0;left<maxAddr;left++){
for(int i = left +1;i<=maxAddr;i++){
if(height[i]<height[left]){
res = res + (height[left]-height[i])
}
}
}
//右半部分处理
for(int right=height.size()-1;right>maxAddr;right--){
for(int i = right-1;i>=maxAddr;i--){
if(height[i]<height[right]){
res = res + (height[right]-height[i])
}
}
}
return res;
}
};
本方法来自https://www.bilibili.com/video/BV1HE411Z7By?spm_id_from=333.337.search-card.all.click&vd_source=a60906b8f7c2ad439b7a7707558defae