首页 > 其他分享 >力扣2558.从数量最多的堆取走礼物

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

时间:2023-10-28 11:34:44浏览次数:52  
标签:gifts 一堆 堆取 2558 力扣 剩下 选中 数量 礼物

给你一个整数数组 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 <= 103
  • 1 <= gifts[i] <= 109
  • 1 <= k <= 103
 1 class Solution
 2 {
 3 public:
 4     long long pickGifts(vector<int> &gifts, int k)
 5     {
 6         multiset<int, greater<int>> s_gifts;
 7         for (int i : gifts)
 8         {
 9             s_gifts.insert(i);
10         }
11         while (k--)
12         {
13             s_gifts.insert((int)sqrt(*s_gifts.begin()));
14             s_gifts.erase(s_gifts.begin());
15         }
16         long long sum = 0;
17         for (int i : s_gifts)
18         {
19             sum += i;
20         }
21         return sum;
22     }
23 };

 

标签:gifts,一堆,堆取,2558,力扣,剩下,选中,数量,礼物
From: https://www.cnblogs.com/coderhrz/p/17793870.html

相关文章

  • 力扣1444.切割后面积最大的蛋糕(贪心)
    矩形蛋糕的高度为 h 且宽度为 w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中: horizontalCuts[i] 是从矩形蛋糕顶部到第  i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离请你按数组 horizontalCuts 和 verticalCuts......
  • Day59 | 力扣695:岛屿的最大面积
    力扣链接写在前面这道题和200.岛屿数量很像,只不过200.岛屿数量是求岛屿总个数,这道题是求最大的岛屿面积,基本代码逻辑是一样的,只不过具体处理细节有一点不一样思路在主函数maxAreaOfIsland中遍历,遇到岛屿temp就计数为1,然后进入dfs函数,每次遍历到一个岛屿,temp就加1,用变量tem......
  • 你是不是瞧不起力扣
    leetcode「10·24」程序员节编程竞赛计算子集给你三个整数\(n,k,m\)。定义\(S=\{i\mid1\lei\lenm+k,i\in\mathbbZ\}\)请返回一个下标从\(0\)开始、长度为\(m\)的数组answer,其中answer[i]表示符合下列条件集合\(T\)的个数。集合\(T\)是集合\(S\)的子集......
  • 力扣每日一题+python知识点回顾(六)
    力扣题目:老人的数目(题号:2678)给你一个下标从0开始的字符串details。details中每个元素都是一位乘客的信息,信息用长度为15的字符串表示,表示方式如下:前十个字符是乘客的手机号码。接下来的一个字符是乘客的性别。接下来两个字符是乘客的年龄。最后两个字符是乘客的座位......
  • 力扣每日一题+python知识点回顾(五)
    力扣题目:做菜顺序(题号:1402)一个厨师收集了他n道菜的满意程度satisfaction,这个厨师做出每道菜的时间都是1单位时间。一道菜的「like-time系数」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是time[i]*satisfaction[i]。返回厨师在准备了一......
  • 力扣每日一题+python知识点回顾(四)
    力扣题目:统计无向图中无法互相到达点对数(题号:2316)给你一个整数n,表示一张无向图中有n个节点,编号为0到n-1。同时给你一个二维整数数组edges,其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边。请你返回无法互相到达的不同点对数目。示例一:输入:n=3,edges=[[0,1],[0,2......
  • 力扣每日一题+python知识点回顾(三)
    力扣题目:根据规则将箱子分类(题号:2525)给你四个整数length,width,height和mass,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子类别的字符串。如果满足以下条件,那么箱子是"Bulky"的:箱子至少有一个维度大于等于10^4。或者箱子的体积大于等于10^9。如果箱子的......
  • 力扣每日一题+python知识点回顾(二)
    力扣题目:同积元组(题号:1726)给你一个由不同正整数组成的数组nums,请你返回满足a*b=c*d的元组(a,b,c,d)的数量。其中a、b、c和d都是nums中的元素,且a!=b!=c!=d。示例1:输入:nums=[2,3,4,6]输出:8解释:存在8个满足题意的元组:(2,6,3,4),(2,6,4,3),(6,2,3,4),......
  • 力扣12.整数转罗马数字
    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做 II ,即为两个并列的1。12写做 XII ,即为 X + I......
  • 力扣每日一题+python知识点回顾
    力扣题目:执行K次操作后的最大分数(题号:2530)给你一个下标从0开始的整数数组nums和一个整数k。你的起始分数为0。在一步操作中:选出一个满足0<=i<nums.length的下标i,将你的分数增加nums[i],并且将nums[i]替换为ceil(nums[i]/3)。返回在恰好执......