Как решить данную задачу?

Функция getLeaders принимает массив чисел, и возвращает массив лидеров

Пояснение: Число считается лидером, если оно больше суммы всех элементов справа от него.

Примечания:

Входной массив содержит не менее 3 элементов Массив входных чисел может содержать как положительные, так и отрицательные числа Числа могут повторяться Массив который возвращается, должен содержать числа в том же порядке, в котором они встречаются в начальном массиве Отсутствие элементов справа от числа расценивается как 0

Примеры:

getLeaders([1, 2, 3, 4, 0]) // Возвращает: [4]

getLeaders([16, 17, 4, 3, 5, 2]) // Возвращает: [17, 5, 2]

Мой код:

function getLeaders(numbers) {
  const leader = [];

  for (let i = 0; i < numbers.length; i++) {
    let sumValuesRight = 0;

    for (let v = numbers[i + 1]; v < numbers.length; v++) {
      sumValuesRight += numbers[v];
    }

    if (numbers[i] > sumValuesRight) {
      leader.push(numbers[i]);
    };
  };

  return leader;
}

console.log(getLeaders([1, 2, 3, 4, 0]));
console.log(getLeaders([16, 17, 4, 3, 5, 2]));
console.log(getLeaders([-1,-29,-26,-2]));


Ответы (1 шт):

Автор решения: EzioMercer

Вам не нужен цикл в цикле, можете просто пройтись по массиву в обратном порядке проверять и складывать по очереди:

const getLeaders = (nums) => {
  let sum = 0;
  const leads = [];
  
  for(let i = nums.length - 1; i >= 0; --i) {
    const num = nums[i];
    
    if (num > sum) leads.push(num);
    sum += num;
  }
  
  return leads.reverse();
}

console.log(getLeaders([1, 2, 3, 4, 0]));
console.log(getLeaders([16, 17, 4, 3, 5, 2]));

→ Ссылка