• LeetCode--Largest Rectangle in Histogram


    ---恢复内容开始---

     1 class Solution {
     2 public:
     3     int largestRectangleArea(vector<int> &height) {
     4         int n = height.size();
     5         if(n == 0)
     6         {
     7             return 0;
     8         }
     9         vector<int> leftMax(n);
    10         vector<int> rightMax(n);
    11         stack<int> s;
    12         int i;
    13         for(i = 0 ; i < n ; ++i)
    14         {
    15             leftMax[i] = 0;
    16             if(i > 0)
    17             {
    18                 int pre = -1;
    19                 while(!s.empty())
    20                 {
    21                     int tmp = s.top();
    22                     if(height[tmp] >= height[i])
    23                     {
    24                         s.pop();
    25                     }
    26                     else
    27                     {
    28                         pre = tmp;
    29                         break;
    30                     }
    31                 }
    32                 s.push(i);
    33                 leftMax[i] = i - pre - 1;
    34             }
    35             else
    36             {
    37                 s.push(i);
    38             }
    39         }
    40         stack<int> s1;
    41         for(i = n-1 ; i >= 0 ; --i)
    42         {
    43             rightMax[i] = 0;
    44             if(i < n-1)
    45             {
    46                 int next = n;
    47                 while(!s1.empty())
    48                 {
    49                     int tmp = s1.top();
    50                     if(height[tmp] >= height[i])
    51                     {
    52                         s1.pop();
    53                     }
    54                     else
    55                     {
    56                         next = tmp;
    57                         break;
    58                     }
    59                 }
    60                 s1.push(i);
    61                 rightMax[i] = next - i - 1;
    62             }
    63             else
    64             {
    65                 s1.push(i);
    66             }
    67         }
    68         int res = INT_MIN;
    69         for(i = 0 ; i < n ; ++i)
    70         {
    71             res = max(res,(leftMax[i]+rightMax[i]+1)*height[i]);
    72         }
    73         return res;
    74     }
    75 };

    主要目的是记录左边以及右边比当前元素大的元素个数

    ---恢复内容结束---

  • 相关阅读:
    [转]system函数返回值探究
    [转]bat中的特殊字符,以及需要在bat中当做字符如何处理
    [转]null和""以及==与equals的区别
    粘包问题
    并发编程
    GIL锁
    五种IO模型
    css选择器
    并发与串行
    模块(二)
  • 原文地址:https://www.cnblogs.com/cane/p/3961689.html
Copyright © 2020-2023  润新知