zoukankan      html  css  js  c++  java
  • 微软面试题: LeetCode 84. 柱状图中最大的矩形 出现次数:1

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

    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     }
  • 相关阅读:
    VMware workstation中安装Ubuntu18.04server
    python一行命令安装chromedriver
    vim配置&相关问题
    博客园美化
    期望DP——HDU4035Maze
    [学习笔记]虚树
    线段树——51nod1593&CF515E 公园晨跑
    [STL] multiset
    [学习笔记] 线性基
    泛化物品优化树型DP——[HAOI2010]软件安装
  • 原文地址:https://www.cnblogs.com/wangxf2019/p/14683011.html
Copyright © 2011-2022 走看看