代码随想录算法训练营day60 | LeetCode 84. 柱状图中最大的矩形

84. 柱状图中最大的矩形(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)

思路:和昨天接雨水的题目类似。双指针做法就是记录每个节点左右两边最小的节点的下标(正好和接雨水相反);单调栈做法也是一样碰见大元素才入栈(和接雨水相反)。

int largestRectangleArea(vector& heights) {
  int size = heights.size();
  vector midLeft(size, 0);
  vector midRight(size, 0);
  midLeft[0]=-1;
  for(int i=1; i=0 && heights[t]>=heights[i]) t=midLeft[t];
    midLeft[i]=t;
  }
  midRight[size-1]=size;
  for(int i=size-2; i>=0; i--){
    int t = i+1;
    while(t
int largestRectangleArea(vector& heights) {
  heights.insert(heights.begin(), 0);
  int size = heights.size();
  heights.push_back(0);
  stack st;
  st.push(0);
  int result = 0;
  for(int i=1; iheights[st.top()]){
      st.push(i);
    }else if(heights[i]==heights[st.top()]){
      st.pop();
      st.push(i);
    }else{
      while(!st.empty() && heights[i]

你可能感兴趣的:(算法,leetcode,职场和发展)