sigo recibiendo un mensaje incorrecto por favor explícame ¿qué está mal?
aquí está la pregunta de desafío: dada una matriz de números enteros, encuentre el par de elementos adyacentes que tiene el producto más grande y devuelva ese producto. Ejemplo
Para inputArray = [3, 6, -2, -5, 7, 3],
la salida debe ser adjacentElementsProduct(inputArray) = 21.
7 y 3 producen el producto más grande.
aquí está mi código de respuesta:
function adjacentElementsProduct(inputArray) { for(let i=0;i<inputArray.length;i++){ let prod =Math.max(inputArray[i]*inputArray[i+1]); } return prod; }
inputArray
, inputArray[i+1]
generará un error OutOfIndex
, ya que el rango de los índices va de 0
a inputArray.length - 1
, y aquí el último i
tendrá el valor de inputArray.length - 1
entonces el valor de i+1
será inputArray.length
y no es correcto.max_res
) para guardar el resultado máximo anterior y compararlo con los nuevos resultados.prod
antes del for loop
, porque las variables que se definen primero en el loop
no serán accesibles después de que finalice el loop
.i
que hace el valor máximo, ya que la pregunta también quería el índice.Debe cambiar su código de esta manera, para obtener el resultado correcto:
function adjacentElementsProduct(inputArray) { let max_res = Number.NEGATIVE_INFINITY; let res_index = -1; let prod = 0; for (let i = 0; i < inputArray.length - 1; i++) { prod = Math.max(inputArray[i] * inputArray[i + 1]); if (prod > max_res){ max_res = prod; let res_index = i; } } return prod; } let inputArray = [3, 6, -2, -5, 7, 3] let prod = adjacentElementsProduct(inputArray) console.log(prod);
1) Tienes que obtener el máximo de dos números como
sum = Math.max(sum, inputArray[i] * (inputArray[i + 1] ?? 1));
2) También debe manejar el último caso donde i + 1
no estará undefined
, luego debe multiplicar por 1
. Puede usar el operador coalescente nulo
(inputArray[i + 1] ?? 1)
function adjacentElementsProduct(inputArray) { let sum = 0; for (let i = 0; i < inputArray.length; i++) { sum = Math.max(sum, inputArray[i] * (inputArray[i + 1] ?? 1)); } return sum; } const inputArray = [3, 6, -2, -5, 7, 3]; console.log(adjacentElementsProduct(inputArray));
Number.MIN_SAFE_INTEGER
permitirá el entero más pequeño porque necesita encontrar la suma más grande que puede incluir enteros negativos.
function solution(inputArray) { let largestProduct = Number.MIN_SAFE_INTEGER; for (let i = 0; i < inputArray.length; i++) { if(inputArray[i] * inputArray[i + 1] > largestProduct) { largestProduct = inputArray[i] * inputArray[i + 1]; } } return largestProduct; }