https://leetcode.com/problems/maximum-product-of-three-numbers Easy

Решение

fun maximumProduct(nums: IntArray): Int {
    var max1 = Int.MIN_VALUE
    var max2 = Int.MIN_VALUE
    var max3 = Int.MIN_VALUE
    var min1 = Int.MAX_VALUE
    var min2 = Int.MAX_VALUE

    for (num in nums) {
        // Обновляем три наибольших числа
        when {
            num > max1 -> {
                max3 = max2
                max2 = max1
                max1 = num
            }
            num > max2 -> {
                max3 = max2
                max2 = num
            }
            num > max3 -> {
                max3 = num
            }
        }
        // Обновляем два наименьших числа
        when {
            num < min1 -> {
                min2 = min1
                min1 = num
            }
            num < min2 -> {
                min2 = num
            }
        }
    }
    // Максимальное произведение может быть между:
    // 1. Тремя наибольшими числами
    // 2. Двумя наименьшими (отрицательными) и одним наибольшим
    return maxOf(max1 * max2 * max3, min1 * min2 * max1)
}