题意:找给定矩形中最大的正方形。
思路:DP,转态方程为:dp[i][j] = min{dp[i-1][j-1], dp[i -1][j], dp[i][j-1]} + 1
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
vector<vector<int> > maxsq;
for(int i = 0; i < matrix.size(); ++ i) {
vector<int> temp(matrix[0].size(), 0);
maxsq.push_back(temp);
}
for(int i = 0; i < matrix.size(); ++ i) {
for(int j = 0; j < matrix[0].size(); ++ j) {
if(matrix[i][j] == '1') {
maxsq[i][j] = 1;
if(i > 0 && j > 0){
maxsq[i][j] = min(maxsq[i - 1][j], min(maxsq[i][j - 1], maxsq[i - 1][j - 1])) + 1;
}
}
}
}
int maxsqs = 0;
for(int i = 0; i < maxsq.size(); ++ i) {
for(int j = 0; j < maxsq[i].size(); ++ j) {
if(maxsqs < maxsq[i][j]) maxsqs = maxsq[i][j];
}
}
return maxsqs * maxsqs;
}
};

本文介绍了一种使用动态规划解决给定矩阵中寻找最大正方形问题的方法。通过状态转移方程dp[i][j]=min{dp[i-1][j-1],dp[i-1][j],dp[i][j-1]}
480

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



