
本文共 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;}
���������������������������������������������������������������������������������������������������������������������������������������������������
发表评论
最新留言
关于作者
