题目地址:Largest Rectangle in Histogram
题目简介:
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。
上述的矩阵宽度均为1, 给定的高度为[2,1,5,6,2,3]。
Input: [2,1,5,6,2,3]
Output: 10
题目解析:
看到这个题目以为和Container With Most Water类似,直接上代码,于是直接错误。原来这个需要挨着才可以,那么就来暴力吧。
例如上面的例子序号分别为[0, 1, 2, 3, 4, 5],可以有[0,1],[0,2],[0,3]...,[4,5]这些区间,刚开始最小的就是单个柱体的高度。碰到挨着最大的组合便更新,好像有不用暴力的方法,但是要去打球了,先贴C++暴力代码吧。
C++:
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
if (heights.size() == 0)
return 0;
int _size = heights.size();
int _min[_size];
memset(_min, -1, sizeof(_min));
int ans = 0;
for(int i = 0; i < _size; i++)
{
if(heights[i] != 0 && ans / heights[i] >= (_size - i))
continue;
for(int j = i; j < _size; j++)
{
if(i == j)
_min[j] = heights[j];
else
{
_min[j] = min(_min[j - 1], heights[j]);
}
ans = max(_min[j] * (j - i + 1), ans);
}
}
return ans;
}
};
Python目测会超时,打球回来再说。