LeetCode Maximal Square
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0Return 4.
int row = matrix.size();
if (row == 0)
return 0;
int col = matrix[0].size();
int maximal = 0;
vector<vector<int> > dp(row, vector<int> (col, 0));//生成对应于matrix的矩阵
//根据matrix初始化dp第一列
for (int i = 0; i < row; i++)
{
dp[i][0] = matrix[i][0] - '0';
maximal = max(maximal, dp[i][0]);
}
//根据matrix初始化dp第一行
for (int j = 1; j < col; j++)
{
dp[0][j] = matrix[0][j]- '0';
maximal = max(maximal, dp[0][j]);
}
for (int i = 1; i < row; i++)
{
for (int j = 1; j < col; j++)
{
if (matrix[i][j] == '1')
{
dp[i][j] = min(dp[i-1][j], min(dp[i - 1][j - 1], dp[i][j - 1])) + 1;
maximal = max(maximal, dp[i][j]);
}
}
}
return maximal * maximal;int row = matrix.size();
if (row == 0)
return 0;
int col = matrix[0].size();
int maximal = 0;
vector<int> pre_col(row, 0);//前一列存储的元素
vector<int> cur_col(row, 0);//当前列存储的元素
for (int i = 0; i < row; i++)
{
pre_col[i] = matrix[i][0] - '0';
maximal = max(maximal, pre_col[i]);
}
for (int j = 1; j < col; j++)
{
cur_col[0] = matrix[0][j] - '0';
maximal = max(maximal, cur_col[0]);
for (int i = 1; i < row; i++)
{
if (matrix[i][j] == '1')
{
cur_col[i] = min(cur_col[i - 1], min(pre_col[i - 1], pre_col[i])) + 1;
maximal = max(maximal, cur_col[i]);
}
}
cur_col = pre_col;
fill(cur_col.begin(), cur_col.end(), 0);
}
return maximal * maximal;当然,也可以就地使用matrix矩阵、而不是用其他辅助空间,但是此时会改动matrix,倘若赋值时超过了char的范围,则越界,程序安全性减低,因此最好不在原来的matrix上做改动。
280



被折叠的 条评论
为什么被折叠?



