给定 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 个单位的雨水(蓝色部分表示雨水)。
示例 2:
输入:height = [4,2,0,3,2,5]
输出:9
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 rHeight = height[i];//右边高的 int lHeight = height[i];//左边高的 for(int r = i+1;r<height.size();r++){ if(rHeight<height[r]){ rHeight = height[r]; } } for(int l = i-1;l>=0;l--){ if(height[l]>lHeight) lHeight = height[l]; } int h = min(lHeight,rHeight) - height[i]; if(h>0) sum+=h; } return sum; } }; //宽度是1 然后给的数组就是代表柱子的高度 所以说看例子就是看他的凹槽可以得到多少水
很遗憾双指针超时了
class Solution { public: int trap(vector<int>& height) { int ans = 0; int left = 0, right = height.size() - 1; int leftMax = 0, rightMax = 0; while (left < right) { leftMax = max(leftMax, height[left]); rightMax = max(rightMax, height[right]); if (height[left] < height[right]) { ans += leftMax - height[left]; ++left; } else { ans += rightMax - height[right]; --right; } } return ans; } };