首页 > 其他 > 详细

微软面试题: LeetCode 84. 柱状图中最大的矩形 出现次数:1

时间:2021-04-20 23:24:53      阅读:30      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

解析:使用 单调栈 + 哨兵的思想 解决,具体思路可参考

liweiwei 题解:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/solution/bao-li-jie-fa-zhan-by-liweiwei1419/

代码:

 1 //单调栈 时间 O(n)  空间O(n)
 2     int largestRectangleArea(vector<int>& heights)
 3     {
 4         const int len = heights.size();
 5         if(len == 0) return 0;
 6         heights.push_back(0);//哨兵
 7         int res = 0;
 8         std::stack<int> st;//遍历过程中,栈内的元素总是非单调递增的
 9         for(int i = 0; i <= len;++i)//哨兵也要和栈内元素比较,保证循环结束,所有的元素都出栈,栈内只剩下哨兵
10         {
11             if(!st.empty() && heights[i] < heights[st.top()])//当前元素比栈顶元素小
12             {
13                 while(!st.empty() && heights[i] < heights[st.top()])//栈内所有元素大于heights[i]的 都要出栈
14                 {
15                     int tp = heights[st.top()];
16                     while(!st.empty() && heights[st.top()] == tp)//将栈内和栈顶元素相同的全部出栈,根据坐标间距计算矩形的长
17                     {
18                         st.pop();
19                     }
20                     int l = st.empty()?-1:st.top();
21                     res = max(res,tp * (i - l - 1));
22                 } 
23             }
24             st.push(i);
25         }
26         return res;
27     }

 

微软面试题: LeetCode 84. 柱状图中最大的矩形 出现次数:1

原文:https://www.cnblogs.com/wangxf2019/p/14683011.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!