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     }

 

posted @ 2014-10-13 18:59  Ryan in C++  阅读(218)  评论(0编辑  收藏  举报