int min(int a,int b){
return a<b?a:b;
}
void swap(int* a,int* b){
int temp=*a;
*a=*b;
*b=temp;
}
int getrain(int* a,int left,int right){
if(left+1>=right) return 0;
int max1=0,max2=0;
int index1=-1,index2=-1;
for(int i=left;i<=right;i++){
if(a[i]>=max1){
max2=max1;
index2=index1;
max1=a[i];
index1=i;
}
}
if(index2<index1){//index1始终指向左边,indexe2始终指向右边;
swap(&index1,&index2);
// swap(&max1,&max2);
}
int w=0;
for(int i=index1+1;i<index2;i++){
w+=a[i];//index1和index2之间墙的体积
}
int sum=(min(a[index1],a[index2])*(index2-index1-1))-w;
if(sum<0) sum=0;
return sum+getrain(a,left,index1)+getrain(a,index2,right);
}
int trap(int* height, int heightSize) {
return getrain(height,0,heightSize-1);
}
求出最高的柱子和次高的柱子,然后递归计算区域两侧,为什么运行报错呢
