您的位置:首页 > 其它

Maximal Square

2015-09-29 02:30 330 查看
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 0

Return 4.

Runtime: 12ms.

class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.empty() || matrix[0].empty()) return 0;

int row = matrix.size();
int col = matrix[0].size();

vector<vector<int> > dp(row, vector<int>(col, 0));
int result = 0;
for(int i = 0; i < row; i++)
if(matrix[i][0] == '1'){
dp[i][0] = 1;
result = 1;
}

for(int j = 0; j < col; j++)
if(matrix[0][j] == '1'){
dp[0][j] = 1;
result = 1;
}

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 - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1;
result = max(result, dp[i][j]);
}
}
}
return result * result;
}
};class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.empty() || matrix[0].empty()) return 0;

int row = matrix.size();
int col = matrix[0].size();

vector<vector<int> > dp(row, vector<int>(col, 0));
int result = 0;
for(int i = 0; i < row; i++)
if(matrix[i][0] == '1'){
dp[i][0] = 1;
result = 1;
}

for(int j = 0; j < col; j++)
if(matrix[0][j] == '1'){
dp[0][j] = 1;
result = 1;
}

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 - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1;
result = max(result, dp[i][j]);
}
}
}
return result * result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: