给定 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;
}