一些遇到的有趣的程序题

这里写图片描述

package demo;

/**
 * @author JD
 *程序是计算数组直方图最大矩形面积,直方图每列宽度为1,如{2,7,9,4,1}的最大矩形面积是7*2=14;
 *思路:从左往右,从a[0]到a[n-1],依次计算能和a[i]组成矩形的最大面积,因为只有大于或者等于a[i]才能和a[i]组成矩形块
 *所以分别从a[i]开始,从左扩展计算能和a[i]组成的矩形的块数,再往右计算能和a[i]组成的矩形的块数,把它们相加,乘以a[i],
 *就是能和a[i]组成矩形的最大面积;
 */
public class Get_Max_Rect {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] a={2,1,5,6,2,3};
        System.out.println(max(a,a.length));
    }

    private static int max(int[] a, int len) {
        // TODO Auto-generated method stub
          int mx=a[0];
          int count ;
        for(int i=0;i<len;i++){

            count=0;
            int j=i;
            while(j>=0){
                //必须必a[i]大,不然矩形凹陷,不能计算以a[i]为宽的矩形面积
                if(a[i]<=a[j]){
                    j--;
                    count++;
                }else{
                    break;
                }   
            }

            System.out.println(count);
            j=i+1;
            while(j<=len-1){
                if(a[i]<=a[j]){
                    j++;
                    count++;
                }else{
                    break;
                }   
            }
            System.out.println(count);
            if(mx<a[i]*count){
                mx=a[i]*count;
            }

        }
        return mx;
    }


    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值