您的位置:首页 > 其它

蓄水池问题

2016-10-22 19:19 162 查看
数组中的每个数对应柱子的高度,求总蓄水量



For example, Given [1,0,2,1,0,1,3,2,1,2,1], return 6

Trapping Rain Water

从左到右遍历数组,找出每个i的maxleft

从右到左遍历数组,找出每个i的maxright

若min(maxleft,maxright)大于i的高度,则其差值为i的蓄水量

class Solution {
public:
int trap(vector<int>& height) {
const int n=height.size();
int *left=new int
();
int *right=new int
();
int sum=0;

for(int i=1;i<n;++i)
left[i]=max(left[i-1],height[i-1]);
for(int i=n-2;i>=0;--i)
right[i]=max(right[i+1],height[i+1]);

for(int i=0;i<n;++i)
{
int value=min(left[i],right[i]);
if(value>height[i])
sum+=value-height[i];
}

delete[] left;
delete[] right;

return sum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息