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;
public class Solution {
public long pickGifts(int[] gifts, int k) {
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> (b - a));
long res = 0;
for (int gift : gifts) {
pq.add(gift);
}
while (!pq.isEmpty() && k > 0) {
long val = pq.poll();
int newVal = (int) Math.sqrt(val);
pq.add(newVal);
k--;
}
while (!pq.isEmpty()) {
res += pq.poll();
}
return res;
}
}