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 = [2,1,5,6,2,3]
,
return 10
.
class Solution { public: /* int Max(int a, int b){return a > b ? a : b;} int largestRectangleArea(vector<int> &height) { height.push_back(0); stack<int> stk; int i = 0; int maxArea = 0; while(i < height.size()){ if(stk.empty() || height[stk.top()] <= height[i]){ stk.push(i++); }else { int t = stk.top(); stk.pop(); maxArea = Max(maxArea, height[t] * (stk.empty() ? i : i - t)); } } return maxArea; } int largestRectangleArea(vector<int> &height) { if(height.empty())return 0; height.push_back(0); int maxRes=0; stack<int> sta; for (int i=0;i<height.size();i++) { if (sta.empty()||(!sta.empty()&&height[i]>=height[sta.top()])) { sta.push(i); } else { int top; int newRes; while(!sta.empty()&&height[i]<height[sta.top()]) { top=sta.top(); sta.pop(); newRes=(sta.empty()?i:(i-sta.top()-1))*height[top]; maxRes=maxRes>newRes?maxRes:newRes; } sta.push(i); } } return maxRes; } */ int largestRectangleArea(vector<int> &height) { if(height.empty())return 0; height.push_back(0); int maxRes=0; stack<int> sta; for (int i=0;i<height.size();i++) { int top; int newRes; while(!sta.empty()&&height[i]<height[sta.top()]) { top=sta.top(); sta.pop(); newRes=(sta.empty()?i:(i-sta.top()-1))*height[top]; maxRes=maxRes>newRes?maxRes:newRes; } sta.push(i); } return maxRes; } };