Multiplicación de arreglo, excepto índice actual - LeetCode 238
Descripción
Dado un arreglo de números enteros llamado nums, devuelve un arreglo llamado answer que en cada posición
(answer[i]) contenga el producto de todos los elementos del arreglo, excepto el número en dicha posición (nums[i]).
Se garantiza que el producto de cualquier prefijo o sufijo de nums puede ser representado con un entero de 32 bits.
Tu solución debe ejecutarse en tiempo O(n) y no debe usar la operación de división.
Ejemplo 1
Entrada: nums = [1,2,3,4]
Salida: [24,12,8,6]
Ejemplo 2:
Entrada: nums = [-1,1,0,-3,3]
Salida: [0,0,9,0,0]
Límites:
- 2 <= nums.length <= 105
- -30 <= nums[i] <= 30
- Las entradas con las que se prueba la solución garantizan que
answer[i]pueda representarse con un entero de 32 bits.
Solución
Esta es una solución propia que puede no ser óptima, es recomendable consultar las soluciones oficiales de LeetCode.
Mostrar solución
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
n = len(nums)
left_products = [1] * n
right_products = [1] * n
answer = [1] * n
# Calculate left products
for i in range(1, n):
left_products[i] = left_products[i-1] * nums[i-1]
# Calculate right products
for i in range(n-2, -1, -1):
right_products[i] = right_products[i+1] * nums[i+1]
# Combine left and right products
for i in range(n):
answer[i] = left_products[i] * right_products[i]
return answer
Solución en Google Colab Probar Solución
Fuente del ejercicio: https://leetcode.com/problems/product-of-array-except-self/