¡Acostúmbrate a escribir juntos! Este es el cuarto día de mi participación en el "Nuevo plan diario de los Nuggets·Desafío de actualización de abril", haz clic para ver los detalles del evento .
tema
área de la matriz y
Dada una m x n
matriz mat
y un entero k
, devuelva una matriz answer
donde cada uno answer[i][j]
sea la suma de todos los elementos que satisfagan las siguientes condiciones mat[r][c]
:
i - k <= r <= i + k
y en la
j - k <= c <= j + k
matriz
(r, c)
.
Ejemplo 1:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]
复制代码
Ejemplo 2:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
输出:[[45,45,45],[45,45,45],[45,45,45]]
复制代码
insinuación:
m == mat.length
n == mat[i].length
1 <= m, n, k <= 100
1 <= mat[i][j] <= 100
复制代码
responder
análisis de resolución de problemas
Ideas para resolver problemas
- Este problema es un problema típico de programación dinámica;
- dp[i][j] representa la longitud máxima del lado cuadrado que puede formar la esquina inferior derecha de la i-ésima fila y la j-ésima columna, entonces la fórmula de recurrencia es:
dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]);
复制代码
Luego max * max
obtenga el valor máximo del área rectangular por .
3. El código de resolución de problemas es el siguiente:
Complejidad
Tiempo Complejidad: O(M * N)
Espacio Complejidad:O(M * N)
código de resolución de problemas
El código de la solución es el siguiente (comentarios detallados en el código):
class Solution {
public int maximalSquare(char[][] matrix) {
/**
dp[i][j]表示以第i行第j列为右下角所能构成的最大正方形边长, 则递推式为:
dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]);
**/
int m = matrix.length;
if(m < 1) return 0;
int n = matrix[0].length;
int max = 0;
int[][] dp = new int[m+1][n+1];
for(int i = 1; i <= m; ++i) {
for(int j = 1; j <= n; ++j) {
if(matrix[i-1][j-1] == '1') {
dp[i][j] = 1 + Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1]));
max = Math.max(max, dp[i][j]);
}
}
}
return max*max;
}
}
复制代码
Resultados de comentarios después del envío (debido a que este tema no ha sido optimizado, el rendimiento es promedio):