zoukankan      html  css  js  c++  java
  • LeetCode-Maximal Rectangle[code]

    code:

     1 #include <iostream>
     2 #include <vector>
     3 #include <stack>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 class Solution {
     8 public:
     9     int largestRectangleArea(vector<int> &height) {
    10         height.push_back(0);
    11         int i = 0;
    12         int result = 0;
    13         stack<int> s;
    14         while (i < height.size())
    15         {
    16             if (s.empty() || height[i]>height[s.top()])
    17                 s.push(i++);
    18             else
    19             {
    20                 int tmp = s.top();
    21                 s.pop();
    22                 result = max(result, height[tmp] * (s.empty() ? i : i - s.top() - 1));
    23             }
    24         }
    25         return result;
    26     }
    27 
    28     int maximalRectangle(vector<vector<char> > &matrix) {
    29         if (matrix.size() == 0 || matrix[0].size() == 0) return 0;
    30         int H = matrix.size(), W = matrix[0].size();
    31         int ret = 0;
    32 
    33         int **tmpHeight = new int*[H];
    34         for (int i = 0; i < H; i++)
    35         {
    36             tmpHeight[i] = new int[W];
    37         }
    38 
    39         for (int i = 0; i < H; i++)
    40         {
    41             for (int j = 0; j < W; j++)
    42             {
    43                 if (matrix[i][j] == '0')
    44                 {
    45                     tmpHeight[i][j] = 0;
    46                 }
    47                 else
    48                 {
    49 
    50                     tmpHeight[i][j] = (i == 0 ? 1 : tmpHeight[i - 1][j] + 1);
    51                 }
    52             }
    53         }
    54         for (int i = 0; i < H; i++)
    55         {
    56             vector<int> vtmp(tmpHeight[i], tmpHeight[i] + W);
    57             ret = max(ret, largestRectangleArea(vtmp));
    58         }
    59         return ret;
    60     }
    61 };
    62 
    63 int main()
    64 {
    65     vector<vector<char>> v;
    66 
    67     char a1[] = { '0', '1', '0', '1', '1'};
    68     char a2[] = { '0', '1', '1', '1', '0' };//要用'1'和'0'来赋值!因为是char数组!不能用1,0 !
    69     char a3[] = { '1', '1', '1', '1','1' };
    70     v.push_back(vector<char>(a1, a1 + 5));
    71     v.push_back(vector<char>(a2, a2 + 5));
    72     v.push_back(vector<char>(a3, a3 + 5));
    73     Solution s;
    74     cout << s.maximalRectangle(v) << endl;
    75     return 0;
    76     }
  • 相关阅读:
    skywalking学习
    logstash使用
    AIO编程
    NIO编程
    NIO入门之BIO
    Akka Cluster之集群分片
    Akka Stream之Graph
    【Swift学习笔记-《PRODUCT》读书记录-实现自定义转场动画】
    CoreData 数据模型文件导出NSManagedObject时重复问题
    iOS图片压缩
  • 原文地址:https://www.cnblogs.com/forcheryl/p/4022855.html
Copyright © 2011-2022 走看看