Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

SvetlozarStoykov avatar SvetlozarStoykov 4 Точки

JS Fundamentals - Arrays Exercise - Задача 6 - Equal Sums

  1. Equal Sums 

Write a function that determines if there exists an element in the array of numbers such that the sum of the elements on its left is equal to the sum of the elements on its right.  

If there are NO elements to the left/right, their sum is 0.  

Print the index that satisfies the required condition or "no" if there is no such index. 

Examples 

Input 

Output 

Comments 

[1, 2, 3, 3] 

At a[2] -> left sum = 3, right sum = 3 

a[0] + a[1] = a[3] 

[1, 2] 

no 

At a[0] -> left sum = 0, right sum = 2 

At a[1] -> left sum = 1, right sum = 0 

No such index exists 

[1] 

At a[0] -> left sum = 0, right sum = 0 

[1, 2, 3] 

no 

No such index exists 

[10, 5, 5, 99, 3, 4, 2, 5, 1, 1, 4] 

At a[3] -> left sum = 20, right sum = 20 

a[0] + a[1] + a[2] = a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10] 

 

 

Ето го моя код : https://pastebin.com/UfEZYBG6 . Не виждам къде се чупи, задачата е лесна, а Judge ми дава 87 / 100.

 

Тагове:
0
Fundamentals Module
willystyle avatar willystyle 2472 Точки
Best Answer

Здравей,

понеже с  arr.indexOf(arr[i]) си мислиш, взимаш индекса на arr[i] (който е просто i), но това не е така, то връща индекса на първата срещната стойност(arr[i]), сега си представи, че в масива имаш еднакви стойности и в цикъла си стигнал до втората, но индекс оф ти връща индекса на първата.

function solve(arr) { 
    let result = 'no'; 
    for (let i = 0; i < arr.length ; i++) { 
        let leftSum = 0;
        let rightSum = 0; 
        for (let j = 0; j < i; j++) {
            leftSum += arr[j];
        } 
        for (let k = arr.length - 1; k > i; k--) {
            rightSum += arr[k];
        } 
        if (leftSum === rightSum){
            result = i;
            break;
        }
    } 
    console.log(result);
}

 

 

1
SvetlozarStoykov avatar SvetlozarStoykov 4 Точки

Воабще не го бях погледнал по този начин. Не знам защо съм решил да се забъркам допълнително с тоя indexOf(), направил съм го по-сложно от нужното.

Благодаря много за разяснението. :)

1
05/10/2019 10:33:52
Nesabg avatar Nesabg 8 Точки

Ето и едно алтернативно решение с 100/100

function solve(arr){
  let position = 'no'
  arr.forEach((e, i, arrs) => {
    let newArr = arrs.slice(0)
    let leftPart = newArr.splice(0, i+1)
    newArr.shift()
    sumArrays(leftPart) === sumArrays(newArr) ? position = i+1 : 'no';
  })
  arr.length <= 1 ? position = 0 : null 
  console.log(position)

  function sumArrays(a){
      return a.reduce((acc, e) => acc + e, 0)
  }
}

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.