Pregunta: tome una matriz con números enteros y encuentre un índice N donde la suma de los números enteros a la izquierda de N sea igual a la suma de los números enteros a la derecha de N. Si no hay un índice que haga que esto suceda, devuelva - 1. Digamos que le dan la matriz {1,2,3,4,3,2,1}: su función equalsides() devolverá el índice 3, porque en la tercera posición de la matriz, la suma del lado izquierdo de la índice ({1,2,3}) y la suma del lado derecho del índice ({3,2,1}) ambos son iguales a 6.
he escrito lo siguiente
En código es el siguiente
function findEvenIndex(arr) { //Code goes here! let mid =1; let leftSum=0; let rightSum=0; while(mid<(arr.length-1)){ for(i=0;i<mid;i++){ leftSum=leftSum+arr[i] } rightSum = rightSum + arr[mid] if(rightSum==leftSum){ console.log("mid: "+ mid); return mid; } else{ mid++; } } return -1; }
sin embargo, no estoy seguro de por qué esto no funciona, cualquier ayuda sería apreciada
Lo más fácil es usar slice
+ reduce
para encontrar la suma start
y end
de ese índice
function findEvenIndex(arr) { let index = -1; for (var i = 0; i < arr.length; i++) { let start = arr.slice(0, i+1).reduce((a, b) => a + b, 0); let end = arr.slice(i).reduce((a, b) => a + b, 0) if (start === end) { index = i } } return index; } console.log(findEvenIndex([1,2,3,4,3,2,1]))
const inputElement = document.querySelector("#input") const button = document.querySelector("#btn") const resultElement = document.querySelector("#result") button.addEventListener("click" , ()=>{ if(!inputElement.value || inputElement.value.split(",").length <3){ return; } const numbers = inputElement.value.split(",").map(number=>Number(number)) resultElement.textContent = findIndexOfEqualSum([...numbers]) }) function findIndexOfEqualSum(arr) { for(let i=0; i < arr.length -1; i++){ let leftSide=0 let rightSide=0 for(j=0 ; j < i; j++){ leftSide+= arr[j] } for(g=i+1 ; g < arr.length; g++){ rightSide+= arr[g] } if(leftSide==rightSide) return i; } return -1; }
<body> <style> body>*:not(:last-child) { margin-bottom: .5rem; } #input { display:block; width:100%; padding:.5rem; } </style> <input id="input" type="text" placeholder="enter comma seperated numbers" > <button id="btn"> Find Index </button> <div id="result"> Result will be here </div> </body>
Un enfoque ligeramente diferente
function findEvenIndex(arr) { let left = 0, right = arr.reduce((a, b) => a + b, 0); for (let i = 0; left <= right; ++i) { right -= arr[i]; if (left === right) { return i; } left += arr[i]; } return -1; } console.log(findEvenIndex([1, 2, 3, 4, 3, 2, 1]))