給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度爲 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
以上是柱狀圖的示例,其中每個柱子的寬度爲 1,給定的高度爲 [2,1,5,6,2,3]
。
圖中陰影部分爲所能勾勒出的最大矩形面積,其面積爲 10
個單位。
示例:
輸入: [2,1,5,6,2,3] 輸出: 10
這道題可以說是很經典了
遇見過很多次類似的,什麼刷油漆了,柵欄了巴拉巴拉
說一下思路
算了,這個人說的極好的,你們看這個人的把
https://blog.csdn.net/Zolewit/article/details/88863970
#include <iostream>
#include <vector>
#include <stack>
#include <math.h>
using namespace std;
int largestRectangleArea(vector<int>& heights) {
int i;
stack<int> stk;
int maxsize = 0;
heights.push_back(0);
int len = heights.size();
for(i = 0; i < len; i++){
while(!stk.empty() && heights[i] < heights[stk.top()]){
int top = stk.top();
stk.pop();
if(stk.empty()){
maxsize = max(maxsize, heights[top] * i);
}
else{
maxsize = max(maxsize, heights[top] * (i - stk.top() - 1));
}
}
stk.push(i);
}
return maxsize;
}
int main(){
int h[] = {2,1,5,6,2,3};
vector<int> heights(h, h + 6);
int re = largestRectangleArea(heights);
cout << re << endl;
}