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 );
    }
};
相关推荐
十盒半价10 分钟前
从递归到动态规划:手把手教你玩转算法三剑客
javascript·算法·trae
GEEK零零七16 分钟前
Leetcode 1070. 产品销售分析 III
sql·算法·leetcode
凌肖战24 分钟前
力扣网编程274题:H指数之普通解法(中等)
算法·leetcode
秋说25 分钟前
【PTA数据结构 | C语言版】将数组中元素反转存放
c语言·数据结构·算法
WebInfra26 分钟前
如何在程序中嵌入有大量字符串的 HashMap
算法·设计模式·架构
森焱森1 小时前
APM与ChibiOS系统
c语言·单片机·算法·架构·无人机
★Orange★2 小时前
Linux Kernel kfifo 实现和巧妙设计
linux·运维·算法
尘世闲鱼2 小时前
解数独(C++版本)
开发语言·c++·算法·解数独
qqxhb2 小时前
零基础数据结构与算法——第四章:基础算法-排序(中)
数据结构·算法·排序算法·归并·快排·堆排
Thomas_YXQ2 小时前
Unity3D游戏内存优化指南
游戏·unity·职场和发展·性能优化·蓝桥杯·游戏引擎·unity3d