Largest Rectangle in Histogram
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 height =
return
Given height =
[2,1,5,6,2,3]
,return
10
.Analysis:
A simple but time-consuming idea is scan every element find the left bound and right bound.
Source Code:
class Solution { public: int largestRectangleArea(vector<int> &height) { // Start typing your C/C++ solution below // DO NOT write int main() function if (height.empty()){return 0;} vector<int>l(height.size(),0); vector<int>r(height.size(),0); for (int i = 0; i<height.size();i++){ int j=i; while((j>0) && (height[i]<=height[j-1])){ j=l[j-1];} l[i]=j; } for (int i = height.size()-1;i>=0;i--){ int j=i; while( (j<height.size()-1) && (height[i]<=height[j+1])){ j=r[j+1];} r[i]=j; } int maxa=0; for (int i=0;i<l.size();i++){ maxa = max(maxa,((r[i]-l[i]+1)*height[i])); } return maxa; } };
No comments:
Post a Comment