美文网首页
2023-10-28 LeetCode:2558. 从数量最多的

2023-10-28 LeetCode:2558. 从数量最多的

作者: alex很累 | 来源:发表于2023-10-27 08:44 被阅读0次

问题链接

2558. 从数量最多的堆取走礼物

问题描述

给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作:

  • 选择礼物数量最多的那一堆。
  • 如果不止一堆都符合礼物数量最多,从中选择任一堆即可。
  • 选中的那一堆留下平方根数量的礼物(向下取整),取走其他的礼物。
    返回在 k 秒后剩下的礼物数量。

示例

输入:gifts = [25,64,9,4,100], k = 4
输出:29
解释: 
按下述方式取走礼物:
- 在第一秒,选中最后一堆,剩下 10 个礼物。
- 接着第二秒选中第二堆礼物,剩下 8 个礼物。
- 然后选中第一堆礼物,剩下 5 个礼物。
- 最后,再次选中最后一堆礼物,剩下 3 个礼物。
最后剩下的礼物数量分别是 [5,8,9,4,3] ,所以,剩下礼物的总数量是 29 。

解题思路

优先队列
使用优先队列按照题目思路处理即可。

代码示例(JAVA)

class Solution {
    public long pickGifts(int[] gifts, int k) {
        PriorityQueue<Integer> queue = new PriorityQueue<Integer>((a, b) -> b - a);
        for (int gift : gifts) {
            queue.offer(gift);
        }
        // 取走最值,留下平方根
        for (int i = 0; i < k; i++) {
            int val = queue.poll();
            val = (int) Math.sqrt(val);
            queue.offer(val);
        }
        
        long res = 0;
        while(!queue.isEmpty()) {
            res += queue.poll();
        }
        return res;
    }
}

相关文章

  • LeetCode-200-岛屿数量

    LeetCode-200-岛屿数量 200. 岛屿数量[https://leetcode-cn.com/probl...

  • LeetCode:岛屿数量

    200. 岛屿数量 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并...

  • Leetcode 岛屿数量

    题目描述 leecode第200题:岛屿数量[https://leetcode-cn.com/problems/n...

  • 一起学算法-452. 用最少数量的箭引爆气球

    一、题目452. 用最少数量的箭引爆气球 LeetCode地址:https://leetcode-cn.com/p...

  • 2022-01-14

    淮海战役打的真艰苦!从1948.11.6开始,到1949.1.10号结束,是解放军伤亡最多,歼敌数量最多,政治影响...

  • leetcode不定期刷题---11.盛最多水的容器

    11.盛最多水的容器 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/pr...

  • leetcode-岛屿数量

    这道题巧妙用了深度遍历和广度遍历 深度遍历比较好理解,找到一个陆地,数值为“1”,然后深度遍历,将其周围的陆地都包...

  • Leetcode 200 岛屿数量

    题意:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且...

  • 2023-10-28

    26日下午是杨晓玲校长的讲座——骨干教师的成长秘籍。杨校长首先分享了她自己的成长经历。其次是提炼出来的关于成长需要...

  • 已知两点和半径求圆心python

    用公式直接求解 leetcode 5415. 圆形靶内的最大飞镖数量

网友评论

      本文标题:2023-10-28 LeetCode:2558. 从数量最多的

      本文链接:https://www.haomeiwen.com/subject/djbuidtx.html