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

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

时间:2023-07-26 16:35:38浏览次数:39  
标签:pq 一堆 堆取 2558 gifts int 数量 礼物

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
class Solution {
    public long pickGifts(int[] gifts, int k) {
        PriorityQueue<Integer> pq = new PriorityQueue<>(
            (a,b)->b.compareTo(a)
        );

        for (int num : gifts) {
            pq.offer(num);
        }

        while (k > 0) {
            int x = pq.poll();
            int back = (int)Math.sqrt(x);
            pq.offer(back);
            k--;
        }
        long res = 0;
        // Iterator<Integer> iterator = pq.iterator();
        // while(iterator.hasNext()) {
        //     res += pq.poll();
        // }
        for (int i : pq) {
            res+=i;
        }
        return res;
    }
}

 

标签:pq,一堆,堆取,2558,gifts,int,数量,礼物
From: https://www.cnblogs.com/fulaien/p/17582828.html

相关文章

  • 情人节礼物,看你中奖没有?
    阅读文本大概需要2分钟。今天是七夕节,估计大家已经在朋友圈、同事、同学那里吃的狗粮够多了,这里就不虐大家了,今天给大家送福利安慰下大家。首先头条推送了一条深度好文,看似简单的两个字其实蕴含着深刻的道理,之所以让你们加班,就是让你们可以观察下今天还在公司加班的异性,那基本都......
  • 互送礼物
     #include<iostream>#include<map>#include<bits/stdc++.h>usingnamespacestd;map<string,int>name_mon;intmain(intargc,char**argv){ stringname[15],zname,pname; intn,mon,m; cin>>n; for(inti=0;i<n;i++){ ......
  • 互送礼物
    1#include<iostream>2#include<map>3usingnamespacestd;4map<string,int>na_mo;5intmain(intargc,char**argv){6intx;7cin>>x;8stringZname,n[x],m;9intr,qian;10for(inti=0;i<x;i+......
  • 礼物互送
    #include<bits/stdc++.h>usingnamespacestd;map<string,int>a;intmain(){intn,many,m;cin>>n;stringname[n],b[n],name_;for(inti=0;i<n;i++){cin>>name[i];}for(inti=0;i<n;i++){......
  • 礼物互赠
    #include<iostream>#include<map>usingnamespacestd;map<string,int>na_mo;intmain(){ intn; cin>>n; stringname[n],ren[n][n],name1[n]; intrenshu[n]; intd=0; for(inti=0;i<n;i++){ cin>>name[i]; } for(int......
  • 互送礼物
    #include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char**argv){intn,m,money;stringname1,name2;cin>>n;map<string,int>name_money;stringname[n];for(inti=0;i<n;i++){cin>>na......
  • ACM暑假训练 中石油oj 3737: 礼物(矩阵快速幂)
    3737:礼物时间限制:5Sec  内存限制:512MB提交:46  解决:12[提交][状态][讨论版]题目描述热情好客的小猴请森林中的朋友们吃饭,他的朋友被编号为1∼N,每个到来的朋友都会带给他一些礼物:香蕉。其中,第一个朋友会带给他1个香蕉,之后,每一个朋友到来以后,都会带给他之前所有......
  • 洛谷 P3723 [AH2017/HNOI2017]礼物
    由题面可得:\[E_j=\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{(i-j)^2}\]令\(q_0=0\),并将没有意义的分式的值视为\(0\),则有:\[E_j=\sum_{i=0}^j\frac{q_i}{(i-j)^2}-\sum_{i=j}^n\frac{q_i}{(i-j)^2}\]令\(A(i)......
  • P1852 舰长的礼物
    #include<iostream>#include<vector>#include<algorithm>#include<numeric>usingnamespacestd;constdoubleEPS=1e-8;intmain(){intn,k;cin>>n>>k;//读入护心毛长度并求出平均值vector<double>......
  • 怎样开发直播软件?直播源码礼物功能篇
     在这个时代,直播不仅仅是一个人火爆的行业,也是每一个直播行业者们养家糊口的重要工作,而在直播赚钱众多方式中,观众送礼物是重要方式之一,礼物是观众充值购买的,如果观众对一个主播表示赞赏和支持,观众就会送出礼物,主播和平台就可以从中获取利益。当然,这也成为直播源码开发直播平台的......