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 );
    }
};
相关推荐
地平线开发者6 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮6 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者7 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考7 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx10 小时前
CART决策树基本原理
算法·机器学习
Wect11 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱11 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway18 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风18 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect18 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript