力扣84.柱状图中最大的矩形

力扣84.柱状图中最大的矩形

  • 初始化pre_max 为-1 存距离最近的小于h[i]的元素下标

  • 初始化suf_max 为 n 存距离最近的小于h[i]的元素下标

cpp 复制代码
  class Solution {
  public:
      int largestRectangleArea(vector<int>& heights) {
          int n = heights.size();
          //分别初始化-1 和 n
          vector<int> pre_max(n,-1),suf_max(n,n);
          stack<int> st;
          for(int i=0;i<n;i++)
          {
              while(!st.empty() && heights[i] <= heights[st.top()]) st.pop();
              if(!st.empty()) pre_max[i] = st.top();
              st.push(i);
          }
          
          st = stack<int>();
          for(int i=n-1;i>=0;i--)
          {
              while(!st.empty() && heights[i] <= heights[st.top()]) st.pop();
              if(!st.empty()) suf_max[i] = st.top();
              st.push(i);
          }
      
          int res=0;
          for(int i=0;i<n;i++)
          {
              res = max(res,(suf_max[i] - pre_max[i] - 1) * heights[i]);
          }
          return res;
      }
  };
相关推荐
Antonio9152 小时前
【图像处理】常见图像插值算法与应用
图像处理·算法·计算机视觉
夜晚中的人海2 小时前
【C++】使用双指针算法习题
开发语言·c++·算法
艾莉丝努力练剑2 小时前
【C++STL :stack && queue (三) 】优先级队列的使用以及底层实现
linux·开发语言·数据结构·c++·stl
im_AMBER4 小时前
数据结构 06 线性结构
数据结构·学习·算法
earthzhang20216 小时前
【1028】字符菱形
c语言·开发语言·数据结构·c++·算法·青少年编程
papership6 小时前
【入门级-算法-3、基础算法:二分法】
数据结构·算法
hjlgs6 小时前
Linux中双向链表介绍
数据结构·链表
通信小呆呆6 小时前
收发分离多基地雷达椭圆联合定位:原理、算法与误差分析
算法·目标检测·信息与通信·信号处理
earthzhang20218 小时前
第3讲:Go垃圾回收机制与性能优化
开发语言·jvm·数据结构·后端·性能优化·golang
丁浩66610 小时前
Python机器学习---2.算法:逻辑回归
python·算法·机器学习