84. 柱状图中最大的矩形
84. 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10
示例 2:
输入: heights = [2,4]
输出: 4
提示:
1 <= heights.length <=105
0 <= heights[i] <= 104
class Solution {
public:
int largestRectangleArea(vector<int>& heights)
{
//每个点的最大矩形是在那个点能延伸的矩形的最大值
//就是我们需要找出每个柱子左右的第一个小于它的柱子就能计算这个柱子能延伸的矩形的最大值
//如果暴力那么会超时,因此我们使用单调栈,让栈保持单调增,由于需要下标计算宽度,所以栈内存放下标
//但是栈是按照柱子长度单调增。
int ans = 0;
vector<int> st;
//左右放入高度为0的柱子最后就不必去计算栈不为空的情况
heights.insert(heights.begin(), 0);
heights.push_back(0);
for (int i = 0; i < heights.size(); i++)
{
while (!st.empty() && heights[st.back()] > heights[i])//遇到栈顶的右边界,那么就出栈,同时计算栈顶的延伸矩阵最大值
{
int cur = st.back();//要计算的栈顶元素出栈
st.pop_back();
int left = st.back() + 1;//cur的左边界下标
int right = i - 1;//cur的右边界下标
ans = max(ans, (right - left + 1) * heights[cur]);//更新最大值
}
st.push_back(i);//保证每个节点入栈计算过
}
return ans;
}
};
本文来自博客园,作者:{BailanZ},转载请注明原文链接:https://www.cnblogs.com/BailanZ/p/16308539.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理