Problema: encuentre un índice N donde la suma de los enteros a la izquierda de N sea igual a la suma de los enteros a la derecha de N. Si no hay un índice que haga que esto suceda, devuelva -1.
Mi solución
function findEvenIndex(arr) { var sum = i => i.reduce((a, b) => a + b), l = arr.length; for (let j = 0; j <= l; j++) { if (sum(arr.slice(0, j - 1)) === sum(arr.slice(j, l))) { return j } else { continue; } } return -1 }findEvenIndex([1,2,3,4,3,2,1]) , no devuelve nada. ¿Dónde está el error que impide que se devuelva 3 en el caso de este ejemplo?He configurado el procedimiento de bucle for de la siguiente manera para ver qué está pasando
for(let j = 0; j <= arr.length; j++){ var left = arr.slice(0, j-1), right = arr.slice(j) console.log(left, right) } /* returns [1] [3,4,3,2,1] [1,2] [4,3,2,1] [1,2,3] [3,2,1] as expected */Sin embargo, cuando intente consola. registrar la suma de estas matrices:
function sum(i){ return i.reduce((a, b) => a+b)} var l = arr.length; for(let j = 0; j <= l; j++){ var left = arr.slice(0, j-1), right = arr.slice(j) console.log(sum(left), sum(right)) }Usando el fragmento anterior, findEvenIndex([1,2,3,4,3,2,1]) devuelve "15 16"?
su ciclo for va hasta l donde debería detenerse en l-1
Esto no es necesario:
} else { continue; }En cuanto al rendimiento, no necesita calcular tantas cosas cada vez.
Una alternativa sería sumar elementos progresivamente antes de su pivote y verificar si es igual a la mitad de (la suma de todos los elementos menos el valor del pivote)