Решение
Нужны два максимальных числа (или max + second max) за один проход.
function maxPairSum(arr) {
if (arr.length < 2) throw new Error('need ≥ 2 elements');
let max1 = -Infinity;
let max2 = -Infinity;
for (const n of arr) {
if (n >= max1) {
max2 = max1;
max1 = n;
} else if (n > max2) {
max2 = n;
}
}
return max1 + max2;
}
maxPairSum([1, 8, 3, 8]);
Уточнения
Если «любые два» с разными индексами при дубликатах — код выше корректен. Для максимума произведения знаки важнее — другая задача.
Итог
O(n) один проход без полной сортировки.