Оставить только те элементы массива, что больше суммы всех правее.
Двигаться справа налево. Накапливать сумму. Сранивать очередной элемент с накопленной суммой.
const getLeaders = numbers =>
numbers.reduceRight(
(acc, c) => { // acc – аккумулятор, c – очередной элемент массива
if (c > acc.sum) { // если больше суммы тех, что правее
acc.result.unshift(c); // положить в массив результатов
}
acc.sum += c; // накапливать сумму
return acc; // аккумулятор пойдёт в следующую итерацию
},
{ result: [], sum: 0 } // начальное значение acc
)
.result; // в итоге интересует только массив result
// использование
getLeaders([16, 17, 5, 4, 3, 1]) // [ 17, 3, 1 ]