Задать вопрос
@VladSotskyi

Как найти максимальное значения массива?

Добрый вечер , никак не могу понять как решить такую задачу. Нужно найти максимальное значения массива разделив элементы на пары и одиночные. Пример: в массиве [0,1,2,3,4,5] будут пары (4,5) 4*5 = 20 и (2,3) 2*3 = 6, остаются два не парных элемента 1 и 0 , так как при умножении 1*0 или 0*1 получим ноль . Следовательно получим максимальное значения массива : (4*5)+(2*3)+1+0 = 27.
Так же в массиве могут быть и отрицательные числа [-1,0,1]. Получим максимальное значения массива : (-1*0)+1 = 1.
И вот еще пример [1,1] . Найдем максимальное значение массива : 1+1 = 2 . Нет смысла умножать так как получим 1.
Заключение : Кто примерно понимает как реализовать такую функцию на JS? Учитывая что элементы массива могут быть разными.
Заранее спасибо!
Дополню описанием из источника:
for the list [0,1,2,3,4,5] the pairs (4,5) and (2,3) are formed and 0 and 1 are single elements. The max. sum is 27 - (20+6+0+1).
for the list [-1,0,1] the pairs (-1,0) is formed and 1 is a single element. The max. sum is 1.
for the list [1,1] no pairs are formed only two single elements. The max. sum is 2.
  • Вопрос задан
  • 562 просмотра
Подписаться 2 Сложный 9 комментариев
Пригласить эксперта
Ответы на вопрос 2
longclaps
@longclaps
function huinia(data) {
    if (data.length < 2) return data[0] || 0;
    let res = [], i;
    data.sort((a, b) => a - b);
    for (i = data.length - 2; i >= 0 && data[i] > 1; i -= 2)
        res.push(`${data.pop()}*${data.pop()}`);
    for (i = data.length - 1; i >= 0 && data[i] > 0; i--)
        res.push(data.pop());
    if (data.length & 1) res.push(data.pop());
    for (i = data.length - 1; i > 0; i -= 2)
        res.push(`(${data.pop()}*${data.pop()})`);
    return res.join(' + ');
}

console.log(huinia([1, 0, 0, -1, 3, 2, 4, 2, -1, -2, -3, -4]));

выхлоп
4*3 + 2*2 + 1 + 0 + (0*-1) + (-1*-2) + (-3*-4)
Ответ написан
Комментировать
villiwalla
@villiwalla
HTML-верстка
Создайте массив массивов через срез со смешением 2, пересчитать в новый массив и использовать Math.max()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы