題目地址: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目測會超時,打球回來再說。