Решение
fun lastStoneWeight(stones: IntArray): Int {
// Используем максимальную кучу (PriorityQueue с обратным порядком)
val maxHeap = PriorityQueue<Int>(compareByDescending { it })
// Заполняем кучу начальными значениями
stones.forEach { maxHeap.add(it) }
// Пока в куче больше одного камня, выполняем бой
while (maxHeap.size > 1) {
val y = maxHeap.poll() // Самый тяжелый камень
val x = maxHeap.poll() // Второй по тяжести камень
// Если после столкновения остается камень, добавляем его обратно в кучу
if (x != y) maxHeap.add(y - x)
}
// Если остался один камень, возвращаем его вес, иначе 0
return maxHeap.poll() ?: 0
}