LeetCode-in-Java

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;

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;
    }
}