Dada una matriz de números enteros, devuelve una respuesta de matriz tal que respuesta[i] sea igual al producto de todos los elementos de nums excepto nums[i].
Se garantiza que el producto de cualquier prefijo o sufijo de números cabe en un entero de 32 bits.
Debes escribir un algoritmo que se ejecute en tiempo O(n) y sin utilizar la operación de división.
¿Puedes resolver el problema en O(1) complejidad de espacio adicional? (La matriz de salida no cuenta como espacio adicional para el análisis de complejidad espacial).
Para resolver este problema, necesitamos calcular el producto de todos los elementos excepto el elemento actual sin utilizar la operación de división. Esto se puede hacer usando dos pasadas sobre la matriz:
Podemos usar dos matrices para almacenar los productos de prefijo y sufijo, luego multiplicarlos para obtener el resultado final.
function productExceptSelf(nums: number[]): number[] { const n = nums.length; const prefixProducts = new Array(n).fill(1); const suffixProducts = new Array(n).fill(1); const result = new Array(n).fill(1); // Compute prefix products for (let i = 1; i = 0; i--) { suffixProducts[i] = suffixProducts[i 1] * nums[i 1]; } // Compute the result by multiplying prefix and suffix products for (let i = 0; iAnálisis de complejidad temporal:
La solución básica funciona bien pero utiliza espacio adicional para almacenar productos de prefijo y sufijo.
Podemos optimizar la solución para usar O(1) espacio adicional usando la matriz de salida para almacenar productos de prefijo primero y luego modificarla en el lugar para incluir los productos de sufijo.
function productExceptSelfOptimized(nums: number[]): number[] { const n = nums.length; const result = new Array(n).fill(1); // Compute prefix products in the result array for (let i = 1; i = 0; i--) { result[i] = result[i] * suffixProduct; suffixProduct *= nums[i]; } return result; }
console.log(productExceptSelf([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelf([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelf([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelf([0,0])); // [0,0] console.log(productExceptSelf([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelf([1,2])); // [2, 1] console.log(productExceptSelfOptimized([1,2,3,4])); // [24,12,8,6] console.log(productExceptSelfOptimized([-1,1,0,-3,3])); // [0,0,9,0,0] console.log(productExceptSelfOptimized([2,2,2,2])); // [8,8,8,8] console.log(productExceptSelfOptimized([0,0])); // [0,0] console.log(productExceptSelfOptimized([5])); // This should not be a valid input as the minimum length is 2 console.log(productExceptSelfOptimized([1,2])); // [2, 1]
Matriz de suma de prefijos:
Algoritmos locales:
Manipulación de matrices:
Al practicar estos problemas y estrategias, puedes mejorar tus habilidades de resolución de problemas y estar mejor preparado para diversos desafíos de codificación.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3