例如直方图共有四个细柱条,依次高为{6,4,2,8},取第一第二细条为底,4为高,得矩形面积2x4=8。取1,2,3,4细条为底,2为高,矩形面积为4x2=8。取第四细条为底,8为高,得矩形面积1x8=8。该题求最大矩形。
main(){
int value[]={2,4,7,4,8,5};
//for(
int left[]={-1,-1,-1,-1,-1,-1};
int i,j,j2,size,max,maxleft,maxright;
max=0;
size=6;
i=0;
for(i=0;i<size;i++){
left[i]=i;
}
i=0;

while(i<6){
for(j=left[i];j>-1&&value[j]>=value[i];j--);
for(j2=i+1;j2<size;j2++)
{ if(value[j2]<value[i]) break;}
if(j2!=size&&left[j2]>j)left[j2]=j;
if(value[i]*(j2-j-1)>max)
{
max=value[i]*(j2-j-1);
maxleft=j+1;
maxright=j2-1;
}
i++;
}
printf("%d %d %d",max,maxleft,maxright);
}
LEFT数组保存的是I位置左边哪个位置到I已经被比较过了,这样就保存了部分比较的数据,这里的测试数据为6格细条,2,4,7,4,8,5





























