Равные стороны массива в JS

Вопрос: Возьмите массив с целыми числами и найдите индекс N, где сумма целых чисел слева от N равна сумме целых чисел справа от N. Если индекса, который бы это сделал, нет, верните - 1. Допустим, вам дан массив {1,2,3,4,3,2,1}: Ваша функция equalsides() вернет индекс 3, потому что на 3-й позиции массива сумма левой части индекса ({1,2,3}) и сумма правой части индекса ({3 ,2,1}) оба равны 6.

Я написал следующее

  1. Объявите две переменные mid и i, где середина индекса, который мы ищем i= это начальный индекс
  2. Затем, пока (mid<= arr.length-1) мы пройдемся по массиву и сложим каждую сторону массива по одной стороне от i=0 до i=mid, а затем от i=mid до i=array.length-1 , добавляя каждую сторону к leftSum и rightSum соответственно
  3. И если leftSum==rightSum в любом из этих случаев, мы вернем mid, если это не так, то mid увеличится на единицу и повторится,
  4. Если mid не возвращается, мы вернем -1 в конце.

В коде это следующее

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;
}

однако я не уверен, почему это не работает, любая помощь будет оценена

Подумайте о том, как вы вычисляете значение для своей правой суммы;)

Nils 20.03.2022 03:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
64
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Проще всего использовать 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>

Успешно справился! , сколько у тебя лет опыта, ты же профи!

Naveen DINUSHKA 20.03.2022 04:00

лол, может быть, 3-4 месяца, но я бы сказал, что все еще новичок

webCatDev 20.03.2022 04:05

Немного другой подход

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]))

Другие вопросы по теме

Numpy: фильтровать сегменты в массиве в зависимости от того, насколько они перекрываются со вторым массивом с другим типом сегментации
Как удалить дочерний элемент во вложенном массиве Json, переименовать идентификатор дочернего элемента и объединить его с родительским элементом?
Если есть повторяющиеся значения из массива, удалите все повторяющиеся значения
Поиск отфильтрованных объектов с использованием разрешенных ключей, а также поискового значения
Матрица треугольника Паскаля с использованием векторов в C++
Чтение трехмерного массива numpy
Могу ли я написать функцию, которая выводит содержимое многомерного массива и возвращает его в виде строки?
Почему он выдает мне эту ошибку # Неустранимая ошибка в строке 0 # Неустранимая ошибка JavaScript с недопустимым размером 169220804?
Как вернуть логическое значение в функции Array.prototype?
Я не могу распечатать предложение с «cout» в С++