Leetcode 84 Largest Rectangle in Histogram
2016-09-24 20:15
357 查看
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 =
The largest rectangle is shown in the shaded area, which has area =
For example,
Given heights =
return
求最大矩形的面积,
一开始是把它当作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;
}
};
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 =
10unit.
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;
}
};
相关文章推荐
- LeetCode(84) Largest Rectangle in Histogram
- leetcode[84]Largest Rectangle in Histogram
- LeetCode 84 Largest Rectangle in Histogram
- leetcode hard专杀之84. Largest Rectangle in Histogram
- leetcode 84 :Largest Rectangle in Histogram
- LeetCode 84 Largest Rectangle in Histogram
- LeetCode 84 (Largest Rectangle in Histogram)java
- LeetCode 84 Largest Rectangle in Histogram (单调栈)
- leetcode || 84、Largest Rectangle in Histogram
- LeetCode---(84)Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram
- 【leetcode】Array——Largest Rectangle in Histogram(84)
- leetcode 84 Largest Rectangle in Histogram
- Leetcode_84 Largest Rectangle in Histogram
- LeetCode84——Largest Rectangle in Histogram
- [leetcode-84]Largest Rectangle in Histogram(c++)
- leetcode_question_84 Largest Rectangle in Histogram
- LeetCode-84-Largest Rectangle in Histogram 经典题目,单调栈
- (java)leetcode-84:Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram (单调栈)