Leetcode 84.柱状图中最大的矩形
原题链接 :Leetcodet原题链接
算法
(单调栈,枚举)
O
(
n
)
O(n)
O(n)
枚举每一个高度,对于每一个高度,分别找出该高度左右第一个小于该高度的索引,在找出左右第一个小于高度的索引时,我们可以维护一个单调栈来找当前高度在其中一侧的小于该高度的高度索引值
时间复杂度
对于左右侧利用单调栈来找第一个小于目前高度的高度索引值,我们只会遍历一次数组,最终找两侧的时间复杂度为 O ( 2 n ) O(2n) O(2n),最后枚举每个高度的时间复杂度也是 O ( n ) O(n) O(n),最终的时间复杂度为 O ( n ) O(n) O(n)。
C++代码
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
stack<int> s;
int n = heights.size();
vector<int> l(n), r(n);
for(int i = n - 1; i >= 0; i --)
{
int t = heights[i];
while(s.size() && heights[s.top()] >= t) s.pop();
r[i] = s.size() == 0 ? n : s.top();
s.push(i);
}
stack<int> q;
for(int i = 0; i < n; i ++)
{
int t = heights[i];
while(q.size() && heights[q.top()] >= t) q.pop();
l[i] = q.size() == 0 ? -1 : q.top();
q.push(i);
}
int res = 0;
for(int i = 0; i < n; i ++)
{
res = max(res, (r[i] - l[i] - 1) * heights[i]);
}
return res;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)