在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 输入:3 3 0 1 1 0 1 1 0 0 0
时间: 2023-06-05 22:06:43 浏览: 130
抱歉,我可以回答这个问题。这个问题是一个计算问题,可以使用动态规划算法来解决。具体的解法可以参考以下链接:
https://leetcode-cn.com/problems/maximal-square/solution/zui-da-zheng-fang-xing-by-leetcode-solution/
希望这可以帮到你。
相关问题
在一个由0和1组成的二维矩阵内,找到只包含1的最大正方形,并返回其面积
这个问题可以使用动态规划来解决。我们可以创建一个相同大小的二维数组,用来记录每个位置为右下角的最大正方形的边长。如果当前位置为0,则最大正方形的边长显然是0;如果当前位置为1,则最大正方形的边长可以通过当前位置上、左、左上三个位置的最小值加1来更新。最终最大正方形的面积就是求出的最大边长的平方。
以下是代码实现:
int maximalSquare(vector<vector<char>>& matrix) {
int m = matrix.size();
if (m == 0) return 0;
int n = matrix[0].size();
int maxSide = 0;
vector<vector<int>> dp(m, vector<int>(n));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == '1') {
if (i == 0 || j == 0) {
dp[i][j] = 1;
} else {
dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
}
maxSide = max(maxSide, dp[i][j]);
}
}
}
return maxSide * maxSide;
}
用C语言解决:在一个由0和1组成的二维矩阵内,找到只包含1的最大正方形,并返回其面积
您好,我明白您的问题。以下是用C语言解决该问题的算法:
1. 定义一个二维数组dp,其中dp[i][j]表示以矩阵中(i, j)位置为右下角的最大正方形边长。
2. 初始化dp矩阵的第一列和第一行,即dp[i][0]和dp[0][j]均设为矩阵中该位置的值。
3. 遍历矩阵中剩下的位置,若该位置的值为0,则dp[i][j]也为0,若该位置的值为1,则分别取dp[i-1][j]、dp[i][j-1]和dp[i-1][j-1]的最小值+1作为dp[i][j]的值。
4. 在遍历的过程中记录dp中最大的值,即为只包含1的最大正方形的边长,返回其面积。
以下是算法的C语言实现代码:
int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){
if(matrix==NULL || matrixSize==0 || *matrixColSize==0) return 0;
int maxLen=0;
int dp[matrixSize][*matrixColSize];
memset(dp, 0, sizeof(dp));
for(int i=0;i<matrixSize;i++){
for(int j=0;j<*matrixColSize;j++){
if(matrix[i][j]=='1'){
if(i==0 || j==0) dp[i][j]=1;
else{
dp[i][j]=fmin(dp[i][j-1],fmin(dp[i-1][j],dp[i-1][j-1]))+1;
}
maxLen=(dp[i][j]>maxLen)?dp[i][j]:maxLen;
}
}
}
return maxLen*maxLen;
}
希望能够为您提供帮助!
阅读全文