网站建设 更新 维护,私人网站如何做竞价,seo推广是什么工作,做视频网站需要流媒体吗题目#xff1a;
给你一个整数数组 gifts #xff0c;表示各堆礼物的数量。每一秒#xff0c;你需要执行以下操作#xff1a;
选择礼物数量最多的那一堆。 如果不止一堆都符合礼物数量最多#xff0c;从中选择任一堆即可。 选中的那一堆留下平方根数量的礼物#xff08…题目
给你一个整数数组 gifts 表示各堆礼物的数量。每一秒你需要执行以下操作
选择礼物数量最多的那一堆。 如果不止一堆都符合礼物数量最多从中选择任一堆即可。 选中的那一堆留下平方根数量的礼物向下取整取走其他的礼物。 返回在 k 秒后剩下的礼物数量。
示例 1
输入gifts [25,64,9,4,100], k 4 输出29 解释 按下述方式取走礼物
在第一秒选中最后一堆剩下 10 个礼物。接着第二秒选中第二堆礼物剩下 8 个礼物。然后选中第一堆礼物剩下 5 个礼物。最后再次选中最后一堆礼物剩下 3 个礼物。 最后剩下的礼物数量分别是 [5,8,9,4,3] 所以剩下礼物的总数量是 29 。 示例 2
输入gifts [1,1,1,1], k 4 输出4 解释 在本例中不管选中哪一堆礼物都必须剩下 1 个礼物。 也就是说你无法获取任一堆中的礼物。 所以剩下礼物的总数量是 4 。
提示
1 gifts.length 10^3 1 gifts[i] 10^9 1 k 10^3
java代码
class Solution {public long pickGifts(int[] gifts, int k) {PriorityQueueInteger pq new PriorityQueueInteger((a, b) - b - a);for (int gift : gifts) {pq.offer(gift);}while (k 0) {k--;int x pq.poll();pq.offer((int) Math.sqrt(x));}long res 0;while (!pq.isEmpty()) {res pq.poll();}return res;}
}