Вопрос: Возьмите массив с целыми числами и найдите индекс N, где сумма целых чисел слева от N равна сумме целых чисел справа от N. Если индекса, который бы это сделал, нет, верните - 1. Допустим, вам дан массив {1,2,3,4,3,2,1}: Ваша функция equalsides() вернет индекс 3, потому что на 3-й позиции массива сумма левой части индекса ({1,2,3}) и сумма правой части индекса ({3 ,2,1}) оба равны 6.
Я написал следующее
В коде это следующее
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.info("mid: "+ mid);
return mid;
}
else{
mid++;
}
}
return -1;
}
однако я не уверен, почему это не работает, любая помощь будет оценена
Проще всего использовать slice
+ reduce
, чтобы найти сумму start
и end
для этого индекса.
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.info(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>
Успешно справился! , сколько у тебя лет опыта, ты же профи!
лол, может быть, 3-4 месяца, но я бы сказал, что все еще новичок
Немного другой подход
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.info(findEvenIndex([1, 2, 3, 4, 3, 2, 1]))
Подумайте о том, как вы вычисляете значение для своей правой суммы;)