LeetCode in Kotlin

2558. Take Gifts From the Richest Pile

Easy

You are given an integer array gifts denoting the number of gifts in various piles. Every second, you do the following:

Return the number of gifts remaining after k seconds.

Example 1:

Input: gifts = [25,64,9,4,100], k = 4

Output: 29

Explanation: The gifts are taken in the following way:

The final remaining gifts are [5,8,9,4,3], so the total number of gifts remaining is 29.

Example 2:

Input: gifts = [1,1,1,1], k = 4

Output: 4

Explanation:

In this case, regardless which pile you choose, you have to leave behind 1 gift in each pile.

That is, you can’t take any pile with you.

So, the total gifts remaining are 4.

Constraints:

Solution

import java.util.PriorityQueue
import kotlin.math.sqrt

class Solution {
    fun pickGifts(gifts: IntArray, k: Int): Long {
        val queue = PriorityQueue<Int> { a, b -> b - a }
        for (gift in gifts) queue.add(gift)
        var result = 0L
        var seconds = k
        while (seconds-- > 0 && queue.isNotEmpty()) {
            queue.add(sqrt(queue.poll().toDouble()).toInt())
        }
        while (queue.isNotEmpty()) result += queue.poll()
        return result
    }
}