42. Trapping Rain Water
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。
示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6
class Solution { public: //如果单向查找,我们最终会停在最高点上。最高点的右边无法计算 //所以我们要双向计算,同时朝最高点行走。 //下面这个解法同时进行。。。 int trap(vector<int> A) { int left=0; int right=A.size()-1; int res=0; int maxleft=0, maxright=0; while(left<=right) { if(A[left]<=A[right])//left<=right,水最终会从左边流走,所以看left能不能在右边找到高墙 { if(A[left]>=maxleft) maxleft=A[left]; else res+=maxleft-A[left]; left++; } else{ if(A[right]>=maxright) maxright= A[right]; else res+=maxright-A[right]; right--; } } return res; } };

浙公网安备 33010602011771号