• 直方图内最大矩阵


    直方图内最大矩阵

    题目描述

    有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。

    给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。

    测试样例:
    [2,7,9,4,1],5
    返回:14

    知道怎么枚举,dp也出来了

    牛客网题解:


    求直方图矩形面积的最大值就是求数组中相邻元素(单个元素,两两相邻,三三相邻。。。 )中最小值乘以他们的数量得到面积,再取最大值,通过分析可以发现实际第一个元素比较一次,第二个元素比较两次,第三个元素比较三次。。。以此类推就可,对于A[n]只需记录A[n-1]之前最大面积的即可,所以不需要设置额外的数组,只需设置两个int变量即可求出面积最大值。

     1 import java.util.*;
     2 
     3 public class MaxInnerRec {
     4     public int countArea(int[] A, int n) {
     5         int maxArea=0;
     6         int min;
     7         for(int i=0;i<n;i++){
     8             min=Integer.MAX_VALUE;
     9             for(int j=i;j>=0;j--){
    10                 min=Math.min(min, A[j]);
    11                 maxArea=Math.max(maxArea,(i-j+1)*min);
    12             }
    13         }
    14         return maxArea;
    15     }
    16 }
     3 
     4 int i,j,L1,L2;
     5     int max=0;
     6     for(i=0;i<n;i++)
     7     {
     8         L1=0;L2=0;
     9         for(j=i;j<n;j++)
    10         {
    11             if(A[j]>=A[i])L1++;
    12             else break;
    13                  
    14         }
    15         for(j=i-1;j>=0;--j)
    16         {
    17             if(A[j]>=A[i])L2++;
    18             else break;    
    19         }
    20         area=(L1+L2)*A[i];
    21         if(area>max)max=area;
    22     }
    23     //printf("max area:%d
    ",max);
    24     return max;
  • 相关阅读:
    Abp集成Swagger的最佳实践
    ELK 集中日志分析 windows部署实战
    nuget国内镜像的解决办法
    nginx+Memcached 缓存设计
    OpenSSL windows 下编译
    HTTPS 双向认证构建移动设备安全体系
    ASP.NET vNext on CentOS 7
    XF custom render 各平台实现类
    Xamarin.Forms 简介
    【开篇】认识网络和传输,架构
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7728474.html
Copyright © 2020-2023  润新知