2270. Número de formas de dividir la matriz
dificultad: mediano
temas: array, prefijo sum
se le dio un 0-indexed entero matriz nums de longitud n.
nums contiene una división válida [&] válida en el índice I Si las siguientes son verdaderas:
la suma de los primeros elementos i 1 es - mayor o igual a la suma de los últimos elementos n - i - 1.
hay - al menos un elemento al derecho de i. Es decir, 0
return
el número de válidos divisores en nums .
Ejemplo 1:
- Entrada: nums = [10,4, -8,7]
- output: 2
- explicación: Hay tres formas de dividir los números en dos partes no vacías:
dividido nums en el índice 0. Luego, la primera parte es [10], y su suma es 10. La segunda parte es [4, -8,7], y su suma es 3. Dado que 10> = 3, i = 0 es una división válida. -
dividido nums en el índice 1. Entonces, la primera parte es [10,4], y su suma es 14. La segunda parte es [-8,7], y su suma es -1. Dado que 14> = -1, i = 1 es una división válida. -
dividido en el índice 2. Entonces, la primera parte es [10,4, -8], y su suma es 6. La segunda parte es [7], y su suma es 7. Dado que 6
Por lo tanto, el número de divisiones válidas en nums es 2. -
Ejemplo 2:
- Entrada: nums = [2,3,1,0]
- output: 2
- explicación: Hay dos divisiones válidas en números:
divididos en el índice 1. Entonces, la primera parte es [2,3], y su suma es 5. La segunda parte es [1,0], y su suma es 1. Dado que 5> = 1, i = 1 es una división válida. -
dividido nums en el índice 2. Entonces, la primera parte es [2,3,1], y su suma es 6. La segunda parte es [0], y su suma es 0. Dado que 6> = 0, i = 2 es una división válida. -
restricciones:
Pista:
para cualquier índice i, ¿cómo podemos encontrar la suma de los primeros (i 1) elementos de la suma de los primeros elementos i? -
Si se conoce la suma total de la matriz, ¿cómo podemos verificar si la suma de los primeros (i 1) elementos mayores o iguales a los elementos restantes? -
Solución:
podemos abordarlo usando los siguientes pasos:
Acercarse:
- prefijo suma : primero, calculamos la suma acumulativa de la matriz desde la izquierda, lo que ayuda a verificar la suma de los primeros elementos i 1.
- suma total : calcule la suma total de la matriz, que es útil para verificar si la suma de los elementos restantes es menor o igual a la suma de los primeros elementos i 1.
- iterar sobre la matriz : para cada índice válido i (donde 0
- eficiencia : en lugar de recalcular las sumas repetidamente, use la suma de prefijo y la suma total para comparaciones eficientes.
Implementemos esta solución en php:
2270. Número de formas de dividir la matriz
Php
/**
* @param integer [] $ nums
* @return entero
*/
function waystoSplitArray ($ nums) {
...
...
...
/**
* ir a ./solution.php
*/
}
// Uso de ejemplo:
$ nums1 = [10, 4, -8, 7];
echo waystosplitArray ($ nums1); // Salida: 2
$ nums2 = [2, 3, 1, 0];
echo waystosplitArray ($ nums2); // Salida: 2
?>
Explicación:
- $ totalsum : esta variable almacena la suma de todos los elementos en la matriz nums.
- $ prefixsum : esta variable realiza un seguimiento de la suma acumulativa de elementos desde la izquierda (hasta el índice i).
- $ RETIRSEM : Esta es la suma de los elementos restantes del índice I 1 hasta el final de la matriz. Se calcula restando $ prefixsum de $ Totalsum.
- check dividido válido : para cada índice i, verificamos si la suma de prefijo es mayor o igual a la suma restante.
Complejidad del tiempo:
- o (n) : recorremos la matriz una vez para calcular la suma y una vez más para verificar las divisiones válidas. Por lo tanto, la complejidad del tiempo es lineal con respecto a la longitud de la matriz.
Complejidad espacial:
- o (1) : estamos usando solo unas pocas variables adicionales ($ Totalsum, $ prefixsum, $ RTIVESUM), por lo que la complejidad del espacio es constante.
Enlaces de contacto
Si encontró esta serie útil, considere dar el repositorio
una estrella en GitHub o compartir la publicación en sus redes sociales favoritas. ¡Tu apoyo significaría mucho para mí!
Si desea un contenido más útil como este, no dude en seguirme: