直方图我的算法

例如直方图共有四个细柱条,依次高为{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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值