Trapping Rain Water
题目大意:在一个坐标平面内,有一些高低不平的柱状,求这些柱状之间所能容纳的最大面积。
解题思路:对于每个柱子,找到其左右两边最高的柱子,该柱子能容纳的面积就是min(max_left,max_right)-height.
所以:从左往右扫描一遍,对于每个柱子,求取左边最大值;从右往左扫描一遍,对于每个柱子,求最大右值;再扫描一遍把每个柱子的面积相加。
Code:
int Trap(int A[],int n){
int *max_left=new int[n];
int *max_right=new int[n];
for(int i=1;i<n;i++){
max_left[i]=max(max_left[i-1],A[i-1]);
max_right[n-1-i]=max(max_right[n-i],A[n-i]);
}
int sum=0;
for(int i=0;i<n;i++){
int height=min(max_left[i],max_right[i]);
if(height>A[i]){
sum+=height-A[i];
}
}
delete[] max_left;
delete[] max_right;
return sum;
}