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.
Subscribe to see which companies asked this question
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
vector<int> stack;
int len = heights.size();
if(len == 0) return 0;
int index = 0, max_area = 0;
heights.push_back(-1);
while (index <= len) {
if(stack.empty() || heights[index] >= heights[stack.back()]) {
stack.push_back(index);
index++;
} else {
int top = stack.back(), temp = 0;
stack.pop_back();
if(stack.empty()) {
temp = heights[top]*index;
} else {
temp = heights[top]*(index-stack.back()-1);
}
if(max_area < temp) max_area = temp;
}
}
return max_area;
}
};
本文介绍了一种求解直方图中最大矩形面积的高效算法。通过使用栈来跟踪直方图条的高度,该算法能在O(n)的时间复杂度内找到具有最大面积的矩形。示例代码清晰展示了如何实现这一算法。
907

被折叠的 条评论
为什么被折叠?



