题目:
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:
//复杂度O(n)
int largestRectangleArea(vector<int> &height) {
int n = height.size();
if (n == 0)
return 0;
int ans = 0;
stack<int> s;
int tp, area;
int i = 0;
while (i < n) {
if (s.empty() || height[i] >= height[s.top()])
s.push(i++);
else {
int tp = s.top();
s.pop();
area = height[tp] * (s.empty() ? i : i - s.top() - 1);
ans = max(ans, area);
}
}
while (!s.empty()) {
tp = s.top();
s.pop();
area = height[tp] * (s.empty() ? i : i - s.top() - 1);
ans = max(ans, area);
}
return ans;
}
};
本文介绍了一种求解直方图中最大矩形面积的高效算法。通过使用栈来跟踪柱状的高度,该算法能够在O(n)的时间复杂度内找到最大矩形区域的面积。示例代码展示了如何实现这一算法,并提供了具体示例。
919

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



