Leetcode 84 Largest Rectangle in Histogram

来源:互联网 发布:科润软件科技有限公司 编辑:程序博客网 时间:2024/04/30 12:52

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.


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


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

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

求最大矩形的面积,

一开始是把它当作DP求解的,即求最大子矩阵,复杂度n方,发现速度不是很快。

然后有了下面的想法,维护一个严格单调递增的数组和一个记录前缀长度的数组,扫描heights,

每次扫到的高度大于或等于数组的最后一个元素,则需要计算之前的结果,并将最后一个元素剔除,反复这个过程。

直到扫到的高度小于数组的最后一个元素,这是将此高度插入。

class Solution {public:    int largestRectangleArea(vector<int>& heights) {        if(heights.size()==0) return 0;        vector<int> x(1,-2),y(1,1);        heights.push_back(-1);        int result=0;        for(int i=0;i<heights.size();i++)        {            int temp=1;            while(x[x.size()-1]>=heights[i])             {                result=max(result,x[x.size()-1]*(y[x.size()-1]+temp-1));                temp+=y[x.size()-1];                x.pop_back();                y.pop_back();            }            x.push_back(heights[i]);            y.push_back(temp);        }        return result;    }};



1 0
原创粉丝点击