LeetCode221 最大正方形
发布日期:2021-05-14 23:50:03 浏览次数:23 分类:精选文章

本文共 4035 字,大约阅读时间需要 13 分钟。

���������������1������������������������������������������

������������0���1������������������������������������������1���������������������������������������������������������������������������������������������

������������������������������������

������������������������������������DP���������������������������������������1���������������������������������������������������������������������������������

���������

  • dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1������������matrix[i][j] == '1'���
  • ���������������������i=0���j=0���������������1������������������

���������������

int maximalSquare(char[][] matrix, int matrixSize, int[] matrixColSize) {
int[][] dp = new int[matrixSize][];
int maxEdge = 0;
for (int i = 0; i < matrixSize; i++) {
dp[i] = new int[matrixColSize[i]];
for (int j = 0; j < matrixColSize[i]; j++) {
if (matrix[i][j] == '1') {
if (i == 0 || j == 0) {
dp[i][j] = 1;
if (dp[i][j] > maxEdge) maxEdge = dp[i][j];
continue;
}
int minValue = Math.min(Math.min(dp[i-1][j-1], dp[i-1][j]), dp[i][j-1]);
dp[i][j] = minValue + 1;
if (dp[i][j] > maxEdge) maxEdge = dp[i][j];
} else {
dp[i][j] = 0;
}
}
if (maxEdge == 0) continue;
}
return maxEdge * maxEdge;
}

������������������������������������

������������������������������������������������������������������������������������������������������������������������������������������������

���������

  • ���������������������������������������������������������������1������������������
  • ���������������������������������������������������������������������������������������������������1���

���������������

int maximalSquare(char[][] matrix, int matrixSize, int[] matrixColSize) {
int[] dp = new int[matrixColSize[0]];
int maxEdge = 0;
char[] prevRow = matrix[0];
dp[0] = (prevRow[0] == '1') ? 1 : 0;
for (int i = 1; i < matrixSize; i++) {
char[] currentRow = matrix[i];
for (int j = 0; j < matrixColSize[i]; j++) {
if (currentRow[j] == '1') {
int prev = dp[j-1];
int temp = dp[j];
dp[j] = Math.min(prev, temp);
if (currentRow[j-1] == '1' && j > 0) {
dp[j] = Math.min(dp[j], dp_prev);
}
dp[j] += 1;
if (dp[j] > maxEdge) maxEdge = dp[j];
} else {
dp[j] = 0;
}
}
}
return maxEdge * maxEdge;
}

���������������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������������������

���������

  • ���������������������������������������������������������������������min���������������1+1���
  • ���������������������������1������������1���

���������������

int maximalSquare(char[][] matrix, int matrixSize, int[] matrixColSize) {
int maxEdge = 0;
for (int i = 0; i < matrixSize; i++) {
for (int j = 0; j < matrixColSize[i]; j++) {
if (matrix[i][j] == '1') {
if (i == 0 || j == 0) {
matrix[i][j] = (matrix[i][j] == '1') ? 1 : 0;
if (matrix[i][j] > maxEdge) maxEdge = matrix[i][j];
continue;
}
int minVal = Math.min(
matrix[i-1][j-1],
Math.min(matrix[i-1][j], matrix[i][j-1])
);
matrix[i][j] = (minVal > 0) ? minVal + 1 : 0;
if (matrix[i][j] > maxEdge) maxEdge = matrix[i][j];
} else {
matrix[i][j] = 0;
}
}
}
return maxEdge > 0 ? maxEdge * maxEdge : 0;
}

���������������������������������������������������������������������������������������������������������������������������������������������������

上一篇:LeetCode91 解码问题
下一篇:LeetCode72 编辑距离

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月15日 11时05分50秒