您的位置:首页 > 其它

LeetCode-Maximal Rectangle[code]

2014-10-13 18:59 169 查看
code:

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

class Solution {
public:
int largestRectangleArea(vector<int> &height) {
height.push_back(0);
int i = 0;
int result = 0;
stack<int> s;
while (i < height.size())
{
if (s.empty() || height[i]>height[s.top()])
s.push(i++);
else
{
int tmp = s.top();
s.pop();
result = max(result, height[tmp] * (s.empty() ? i : i - s.top() - 1));
}
}
return result;
}

int maximalRectangle(vector<vector<char> > &matrix) {
if (matrix.size() == 0 || matrix[0].size() == 0) return 0;
int H = matrix.size(), W = matrix[0].size();
int ret = 0;

int **tmpHeight = new int*[H];
for (int i = 0; i < H; i++)
{
tmpHeight[i] = new int[W];
}

for (int i = 0; i < H; i++)
{
for (int j = 0; j < W; j++)
{
if (matrix[i][j] == '0')
{
tmpHeight[i][j] = 0;
}
else
{

tmpHeight[i][j] = (i == 0 ? 1 : tmpHeight[i - 1][j] + 1);
}
}
}
for (int i = 0; i < H; i++)
{
vector<int> vtmp(tmpHeight[i], tmpHeight[i] + W);
ret = max(ret, largestRectangleArea(vtmp));
}
return ret;
}
};

int main()
{
vector<vector<char>> v;

char a1[] = { '0', '1', '0', '1', '1'};
char a2[] = { '0', '1', '1', '1', '0' };//要用'1'和'0'来赋值!因为是char数组!不能用1,0 !
char a3[] = { '1', '1', '1', '1','1' };
v.push_back(vector<char>(a1, a1 + 5));
v.push_back(vector<char>(a2, a2 + 5));
v.push_back(vector<char>(a3, a3 + 5));
Solution s;
cout << s.maximalRectangle(v) << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: