2023-10-28 LeetCode每日一题(从数量最多的堆取走礼物)

2023-10-28每日一题

一、题目编号

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

二、题目链接

点击跳转到题目位置

三、题目描述

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

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

返回在 k 秒后剩下的礼物数量。

示例1:2023-10-28 LeetCode每日一题(从数量最多的堆取走礼物)_第1张图片
示例2:
2023-10-28 LeetCode每日一题(从数量最多的堆取走礼物)_第2张图片
提示:

  • 1 <= gifts.length <= 103
  • 1 <= gifts[i] <= 109
  • 1 <= k <= 103

四、解题代码

class Solution {

priority_queue<int> q;
public:
    long long pickGifts(vector<int>& gifts, int k) {
        for(int i = 0; i < gifts.size(); ++i){
            q.push(gifts[i]);
        }
        while(k != 0){
            k--;
            int num = q.top();
            q.pop();
            num = sqrt(num);
            q.push(num);
        }
        long long sum = 0;
        while(!q.empty()){
            sum += q.top();
            q.pop();
        }
    return sum;
    }
};

五、解题思路

(1) 队列

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)