Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

242
Vistas
Cómo multiplicar valores de matriz sin bucles anidados

Problema:

Dada una matriz de enteros, devuelva una nueva matriz tal que cada elemento en el índice i de la nueva matriz sea el producto de todos los números en la matriz original excepto el que está en i.

Por ejemplo:

  • si nuestra entrada fuera [1, 2, 3, 4, 5], la salida esperada sería [120, 60, 40, 30, 24].

  • Si nuestra entrada fuera [3, 2, 1], la salida esperada sería [2, 3, 6].

Solución 1 (con bucles anidados): puedo resolver esto mediante bucles anidados como se muestra a continuación:

 const input = [1, 2, 3, 4, 5]; function output(items) { const finalArray = []; for (let i = 0; i < items.length; i++) { let multipliedNum = 1; items.forEach((item, indx) => { if (i !== indx) { multipliedNum = multipliedNum * item; } }); finalArray.push(multipliedNum) } return finalArray; } console.log(output(input))

¿Estoy tratando de encontrar otra solución sin bucles anidados dentro de la función de salida? Cualquier ayuda o sugerencia realmente apreciada.

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si no hay valores cero, puede recorrer todos los valores una vez para obtener el producto. Luego, simplemente devuelva la matriz donde cada producto se divide por cada entrada.

Sin embargo, si hay ceros, hay que hacer un poco más para comprobar cuántos hay. Un cero está bien, pero más de 1 significa que el valor es cero para cada entrada.

 const input = [1, 2, 3, 4, 5]; const input2 = [1, 2, 3, 4, 0]; const input3 = [1, 2, 3, 0, 0]; function output(items) { let zeroCount = 0; let totalProduct = 1; for (let i = 0; i < items.length; i++) { if (items[i] === 0) { if (++zeroCount > 1) break; continue; } totalProduct *= items[i]; } if (zeroCount > 1) { // more than 1 zero -> all values are 0 return new Array(items.length).fill(0); } else if (zeroCount === 1) { // only 1 zero -> only the value that is zero will be the totalProduct return items.map(item => item === 0 ? totalProduct : 0); } // no zero in array -> divide the totalProduct by each item return items.map(item => totalProduct / item); } console.log(output(input)) console.log(output(input2)) console.log(output(input3))

about 4 years ago · Santiago Trujillo Denunciar

0

Según lo que dijo @Mike en el comentario, aquí está la respuesta.

 const input = [1, 2, 3, 4, 5]; const mulValues = input.reduce((acc, next) => acc * next); const output = input.map(i => mulValues/i) console.log(output)
about 4 years ago · Santiago Trujillo Denunciar

0

puedes hacer algo así (suponiendo que la matriz no contenga cero):

  • calcular el producto de todos los elementos de la matriz
  • divida el producto por el elemento en la posición [i] para obtener el resultado deseado
 const input = [1, 2, 3, 4, 5]; function output(items) { const finalArray = []; const multipliedNum=1; for (let i = 0; i < items.length; i++) { multipliedNum *= item[i]; } for (let i = 0; i < items.length; i++) { finalArray.push(multipliedNum/item[i]); } return finalArray; } console.log(output(input))
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda