直方图包含最大矩形

来源:互联网 发布:sql delete select语句 编辑:程序博客网 时间:2024/05/16 07:47

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

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

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

这里要考虑的只有:是要高一些的呢?还是要长一些的呢?当然了,我们要的是面积最大的。所以先找到区域里最矮的乘上整个区域长度,然后把这个最矮的矩形左右两边分别进行如上操作,期间一直找寻最大面积~

import java.util.*;public class MaxInnerRec {    public int countArea(int[] A, int n) {        // write code here        int s = 0;        int e = n - 1;        return Max_Area(A, s, e);    }    public int Max_Area(int[] A, int s, int e) {        if(s==e)            return A[s];if(s>e)            return 0;        int area = 0, area_t = 0;        int m_index = Find_min(A, s, e);        area = A[m_index] * (e-s+1);        area_t = Max_Area(A, s, m_index-1);        if(area_t>area)            area = area_t;        area_t = Max_Area(A, m_index+1, e);        if(area_t>area)            area = area_t;        return area;    }    public int Find_min(int[] A, int s, int e) {        int min = A[s], res = s, i = s+1;        for(; i<=e; i++) {            if(A[i]<min) {                min = A[i];                res = i;            }        }        return res;    }    }


0 0
原创粉丝点击