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:
1 <= gifts.length <= 103
1 <= gifts[i] <= 109
1 <= k <= 103
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
}
}