算法刷题 Day 60 | ● 84.柱状图中最大的矩形
84.柱状图中最大的矩形
有了之前单调栈的铺垫,这道题目就不难了。
Tips:这道题我用了自己想出来的解法,两遍单调栈,分别找到左边和右边比当前柱子矮的坐标,然后再for循环一遍计算出每个柱子所能延展出来的矩形面积即可。
我的题解:
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
// 两遍单调栈,分别找到左边和右边比当前柱子矮的坐标
// 然后再for循环一遍计算出每个柱子所能延展出来的矩形面积即可
stack<int> st;
vector<int> leftMin(heights.size(),-1);
vector<int> rightMin(heights.size(),heights.size());
for(int i=0; i<heights.size(); i++){
while(!st.empty() && heights[i] < heights[st.top()]){
rightMin[st.top()] = i;
st.pop();
}
if(st.empty() || heights[i] >= heights[st.top()]){
st.push(i);
}
}
stack<int>().swap(st);
for(int i=heights.size()-1; i>=0; i--){
while(!st.empty() && heights[i] < heights[st.top()]){
leftMin[st.top()] = i;
st.pop();
}
if(st.empty() || heights[i] >= heights[st.top()]){
st.push(i);
}
}
int result = 0;
for(int i = 0; i<heights.size(); i++){
int temp = heights[i] * (rightMin[i] - leftMin[i] - 1);
result = max(result,temp);
}
return result;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构