Решение
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)
}