leetcode_2558 从数量最多的堆取走礼物

1. 题意

给定一个数组,每次从中取走最大的数,返回开根号向下取整送入堆中,最后计算总和。

从数量最多的堆取走礼物

2. 题解

直接用堆模拟即可

2.1 我的代码

用了额外的空间O( n )
priority_queue会自动调用make_heap()pop_heap()

cpp 复制代码
class Solution {
public:
    long long pickGifts(vector<int>& gifts, int k) {
        priority_queue<int, vector<int>, less<> > maxHeap(gifts.begin(), gifts.end());

        long long ans = 0;
        for ( int i = 0; i < k; ++i) {
            int p = maxHeap.top();
            if (p == 1) break;
            maxHeap.pop();
            maxHeap.push( (int) sqrt(p));
        }


        while (!maxHeap.empty()) {
            ans += maxHeap.top();
            maxHeap.pop();
        }

        return ans;
    }
};
2.2 更简的代码

直接在原数组上建堆就可以了

cpp 复制代码
class Solution {
public:
    long long pickGifts(vector<int>& gifts, int k) {
        
        make_heap(gifts.begin(), gifts.end(), less<int>());

        for ( int i = 0; i < k; ++i) {
            pop_heap(gifts.begin(), gifts.end() );
            gifts.back() = sqrt(gifts.back());
            push_heap(gifts.begin(), gifts.end());
        }


        return accumulate(gifts.begin(), gifts.end(), 0ll );
    }
};
相关推荐
随意起个昵称8 小时前
区间dp-基础题目1(石子合并)
算法·动态规划
吞下星星的少年·-·8 小时前
线段树模板
算法
段一凡-华北理工大学8 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章11:演进路径与行业未来
大数据·网络·人工智能·算法·工业智能体·高炉炼铁智能化
凯瑟琳.奥古斯特8 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
叶小鸡9 小时前
小鸡玩算法-力扣HOT100-多维动态规划
算法·leetcode·动态规划
星马梦缘9 小时前
aaaaa
数据结构·c++·算法
菜菜的顾清寒10 小时前
力扣HOT100(42)链表-随机链表的复制
算法·leetcode·链表
lqqjuly10 小时前
模型剪枝与稀疏化:理论、算法与可运行实现
人工智能·算法·剪枝
凯瑟琳.奥古斯特10 小时前
数据库原理选择题精选
数据库·python·职场和发展
逻辑君10 小时前
Foresight研究报告【20260011】
人工智能·线性代数·算法·矩阵