分别找到每一个bar左右最高的bar,若 min(maxRight[i], maxLeft[i]) - A[i] 大于0, 则累加
参考 http://blog.youkuaiyun.com/linhuanmars/article/details/20888505
代码
class Solution {
public:
int trap(int A[], int n) {
if(n<=1)
return 0;
int maxLeft[n];
int maxRight[n];
int maxLeftTemp = 0;
for(int i = 0; i < n; ++i)
{
maxLeft[i] = maxLeftTemp;
if(A[i]>maxLeftTemp)
maxLeftTemp = A[i];
}
int maxRightTemp = 0;
for(int i = n-1; i >= 0; --i)
{
maxRight[i] = maxRightTemp;
if(A[i]>maxRightTemp)
maxRightTemp = A[i];
}
int result = 0;
for(int i = 0; i < n; ++i)
{
int temp = min(maxRight[i], maxLeft[i]) - A[i];
if(temp>0)
result += temp;
}
return result;
}
};