Largest Rectangle in Histogram

来源:互联网 发布:网络群组信息管理规定 编辑:程序博客网 时间:2024/06/05 23:59

-----QUESTION-----

Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.

Largest <wbr>Rectangle <wbr>in <wbr>Histogram

Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

 

Largest <wbr>Rectangle <wbr>in <wbr>Histogram

The largest rectangle is shown in the shaded area, which has area = 10 unit.

 

For example,
Given height = [2,1,5,6,2,3],
return 10.

-----SOLUTION-----

class Solution {public:    int largestRectangleArea(vector<int> &height) {        int* l = new int [height.size()];        int* r = new int [height.size()];            l[0]=0;        for( int i =1; i <height.size(); i++)        {            if(height[i]==0)            {                l[i] = 0;                continue;            }            int j = i-1;            for(; j >= 0; j--){                if(height[i] <= height[j]) j = l[j]; //用动态规划求l[i]否则会Time Limit Exceeded                if(height[i] > height[j]) break;            }            l[i] = (j==i-1)?i:j+1;        }        r[height.size()-1]=height.size()-1;        for(int i =height.size()-2; i >=0; i--){            if(height[i]==0)            {                r[i] = 0;                continue;            }            int j = i+1;            for(; j <height.size(); j++){                if(height[i] <= height[j]) j = r[j]; //动态规划                if(height[i] > height[j]) break;            }            r[i] = (j==i+1)?i:j-1;        }                int area;        int largestArea = 0;        for(int i = 0; i< height.size(); i++)        {            area = (r[i]-l[i]+1) * height[i];            if(area>largestArea) largestArea = area;        }        return largestArea;    }};


0 0
原创粉丝点击