https://leetcode.com/problems/last-stone-weight Easy

Решение

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
}