求直方图围成的最大矩形面积

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

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

 

比如上面的数组{2,1,5,6,2,3},其最大矩形面积如下所示

             

可以看出其面积为10。

代码如下

 public static int max_Area(int[] height, int n) {
                                      int res = 0;  
                               
                               for (int i = 0; i < n; i ++)  
                               {  
                                   int iwidth = 1;  
                                   // 向后寻找  
                                   for (int back = i - 1; back >= 0; back --)  
                                   {  
                                       if (height[i] > height[back])
                                           break;  
                                       else   
                                           iwidth ++;  
                                   }  
                                   // 向前寻找  
                                   for (int front = i + 1; front < n; front++)  
                                   {
                                       if (height[i] > height[front])
                                           break;
                                       else
                                           iwidth ++;
                                   }
                                     
                                   // 计算面积
                                   int currentArea = height[i]*iwidth;
                             
                                   
                                   if (res < currentArea)
                                     res = currentArea;
                               }  
                               return res; 

 

posted on 2016-07-04 15:30  峰小白  阅读(1641)  评论(0编辑  收藏  举报