已解决
leetcode 84. 柱状图中最大的矩形
来自网友在路上 183883提问 提问时间:2023-10-24 23:39:06阅读次数: 83
最佳答案 问答题库838位专家为你答疑解惑
84. 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10
示例 2:
输入: heights = [2,4] 输出: 4
思路:
/*
单调递减栈
遍历到的数组元素大于或等于栈顶元素,压入栈
遍历到的数组元素小于栈顶元素,取出栈顶元素为middle,st.pop(),heights[i] = right; left = st.top();
h = height[middle];
w = i-st.top()-1;
遍历到的数组元素小于栈顶元素的判断是持续性的判断
result = max(h*w,result);
*/
代码:
class Solution {
public:int largestRectangleArea(vector<int>& heights) {/*单调递减栈遍历到的数组元素大于或等于栈顶元素,压入栈遍历到的数组元素小于栈顶元素,取出栈顶元素为middle,st.pop(),heights[i] = right; left = st.top();h = height[middle];w = i-st.top()-1;遍历到的数组元素小于栈顶元素的判断是持续性的判断result = max(h*w,result); */int result = 0;stack<int>st;st.push(0);heights.insert(heights.begin(),0);heights.push_back(0);for(int i = 1;i<heights.size();i++){if(heights[i]>heights[st.top()]){st.push(i);}else if(heights[i]==heights[st.top()]){st.push(i);}else{while(!st.empty()&&heights[i]<heights[st.top()]){int middle = st.top();st.pop();if(!st.empty()){int right = i;int left = st.top();int h = heights[middle];int w = right-left-1;result = max(result,h*w);}}}st.push(i);}return result;}
};
还有很多瑕疵,还需继续坚持!
查看全文
99%的人还看了
相似问题
- 〖大前端 - 基础入门三大核心之JS篇㊲〗- DOM改变元素节点的css样式、HTML属性
- CSS中常用的伪元素选择器
- XmlElement注解在Java的数组属性上,以产生多个相同的XML元素
- Web 自动化神器 TestCafe(二)—元素定位篇
- 代码随想录算法训练营第一天|数组理论基础,704. 二分查找,27. 移除元素
- 代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
- JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素
- Arcgis js Api日常天坑问题3——加载geojson图层,元素无属性
- 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
- 力扣.82删除链表中的重复元素(java语言实现)
猜你感兴趣
版权申明
本文"leetcode 84. 柱状图中最大的矩形":http://eshow365.cn/6-23700-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!