Darse cuenta de la construcción de la gama de productos
Descripción del Título
Dada una matriz A [0,1,…, n-1], construya una matriz B [0,1,…, n-1], donde los elementos de B son B [i] = A [0] A [ 1] … * A [i-1] A [i + 1] … * A [n-1]. No se puede utilizar la división. (Nota: Se estipula que B [0] = A [1] * A [2] *… * A [n-1], B [n-1] = A [0] * A [1] *… * A [n -2];)
Para el caso donde la longitud de A es 1, B no tiene sentido y no se puede construir, por lo que esta situación no existirá.
Ideas de solución
Dado que la multiplicación no se puede usar para analizar el problema, podemos dividir el producto en dos términos. cual es:
C [i] = A [0] * A [1] *… * A [i-1]
D [i] = A [i + 1] … A [n-1]
B [i] = C [i] * D [i]
Calculemos C [i] primero, usando inducción matemática:
C [0] = 1
C [1] = A [0]
C [2] = A [0] * A [1]
C [3] = A [0] * A [1] * A [2]
…
nosotros La regla se puede dibujar: C [i] = C [i-1] * A [i -1] (i> = 1)
Seguimos usando la inducción matemática para calcular D [i]:
D [n-1] = 1
D [n-2] = A [n -1]
D [n-3] = A [n-1] * A [n-2]
Podemos dibujar la ley: D [i ] = D [i + 1] * A [i + 1] (i <= n-2)
Esta pregunta está escrita en lenguaje java de la siguiente manera:
import java.util.ArrayList;
public class Solution {
public int[] multiply(int[] A) {
if (A == null || A.length <= 0) {
return null;
}
int[] C = new int[A.length];
C[0] = 1;
for (int i = 1; i < C.length; i++) {
C[i] = C[i - 1] * A[i - 1];
}
int[] D = new int[A.length];
D[D.length - 1] = 1;
for (int i = D.length - 2; i >= 0; i--) {
D[i] = D[i + 1] * A[i + 1];
}
int[] result = new int[A.length];
for (int i = 0; i < result.length; i++) {
result[i] = C[i] * D[i];
}
return result;
}
}