42.接雨水

cpp
class Solution {
public:
int trap(vector<int>& height) {
int sum = 0;
for(int i = 0; i < height.size(); i++){
//第一个柱子和最后一个柱子不接雨水
if(i == 0 || i == height.size() - 1) continue;
int left_h = height[i]; //记录左边柱子的最高高度
int right_h = height[i]; //记录右边柱子的最高高度
for(int l = i - 1; l >=0; l--){
if(height[l] > left_h) left_h = height[l];
}
for(int r = i + 1; r < height.size(); r++){
if(height[r] > right_h) right_h = height[r];
}
// 【核心】每列的水量是左右最高的柱子高度最小值,减本列柱高度
int h = min(left_h, right_h) - height[i];
if(h > 0) sum += h;
}
return sum;
}
};