【每日一题】从数量最多的堆取走礼物

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:排序
    • 方法二:优先队列
  • 其他语言
    • python3
  • 写在最后

Tag

【优先队列】【排序】【数组】【2023-10-28】


题目来源

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


题目解读

执行 k 次操作,每次从数量最多的堆中取走礼物。


解题思路

每次要从礼物数量最多的堆中取走一定的礼物,在没学过 优先队列 这种数据结构之前,可以使用 排序 来完成每次都从礼物数量最多的堆中取走一定的礼物。

方法一将会介绍排序的方,方法二介绍优先队列的方法。

方法一:排序

先对礼物数组进行升序排序,数组中最后一个元素就是最大的礼物数,将其值更新为平方根值。对以上操作执行 k 次,最后数组中所有礼物数量之和就是我们要返回的答案。

实现代码

class Solution {
public:long long pickGifts(vector<int>& gifts, int k) {int n = gifts.size();while (k--) {sort(gifts.begin(), gifts.end());gifts[n-1] = sqrt(gifts[n-1]);}long long res = accumulate(gifts.begin(), gifts.end(), 0ll);return res;}
};

复杂度分析

时间复杂度: O ( k ⋅ n l o g n ) O(k \cdot nlogn) O(knlogn) k k k 为执行的时间, n n n 为数组 gifts 的长度。

空间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

方法二:优先队列

我们使用大顶堆来维护各堆中礼物的数量,进行 k 次如下的操作:每次从左取出最大的一个,求平方根之后将结果放入堆中。最后,大顶堆中所有礼物数量之和就是我们要返回的答案。

实现代码

class Solution {
public:long long pickGifts(vector<int>& gifts, int k) {priority_queue<int> pq(gifts.begin(), gifts.end());while (k--) {int maxGift = pq.top();pq.pop();pq.push(sqrt(maxGift));}long long res = 0;while (!pq.empty()) {res += pq.top();pq.pop();}return res;}
};

复杂度分析

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn) n n n 为数组 gifts 的长度。

空间复杂度: O ( l o g n ) O(logn) O(logn)


其他语言

python3

这里只给出 python3 的示例代码。

class Solution:def pickGifts(self, gifts: List[int], k: int) -> int:pq = [-gift for gift in gifts]heapify(pq)while k:x = heappop(pq)heappush(pq, -int(sqrt(-x)))k -= 1return -sum(pq)

在 python3 中,我们引入 heap 模块来构建优先队列,通过 heapify 构建最小堆,因为我们希望使用最大堆,所以将礼物数量取负数放入堆中。


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/151219.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在docker中创建EMQX 加数据卷

1、从虚拟容器中复制出来文件 docker run --rm emqx/emqx:5.3.0 sh -c cd /opt/emqx && tar -c etc | tar -C $PWD -x 2、将这三个文件夹分别赋予最高权限&#xff0c;也可以777可以755 chmod -R 777 data chmod -R 777 etc chmod -R 777 log 3、创建容器代码 docke…

Compose 自定义 - 绘制 Draw

一、概念 所有的绘制操作都是通过调整像素大小来执行的。若要确保项目在不同的设备密度和屏幕尺寸上都能采用一致的尺寸&#xff0c;请务必使用 .toPx() 对 dp 进行转换或者采用小数尺寸。 二、Modifier 修饰符绘制 官方页面 在修饰的可组合项之上或之下绘制。 .drawWithCon…

Spring Boot 使用 Disruptor 做内部高性能消息队列

这里写自定义目录标题 一 、背景二 、Disruptor介绍三 、Disruptor 的核心概念3.1 Ring Buffer3.2 Sequence Disruptor3.3 Sequencer3.4 Sequence Barrier3.5 Wait Strategy3.6 Event3.7 EventProcessor3.8 EventHandler3.9 Producer 四、案例-demo五、总结 一 、背景 工作中遇…

第八节——Vue渲染列表+key作用

一、列表渲染 vue中使用v-for指令进行列表 <template><div><!-- item 代表 当前循环的每一项 --><!-- index 代表 当前循环的下标--><!-- 注意&#xff1a;必须要加key--><div v-for"(item, index) in arr" :key"index"…

苹果秋季发布会官宣,新款Mac将搭载M3芯片,来势迅猛!

苹果宣布将于 10 月 31 日上午 8 点&#xff08;北京时间&#xff09;举行发布会&#xff0c;这次发布会的主题是「来势迅猛」&#xff0c;旨在为全球的苹果粉丝和科技爱好者带来令人期待的新品发布。这次发布会引人瞩目&#xff0c;因为它将聚焦在 Mac 系列产品以及全新的 M3 …

Vue3.3指北(三)

Vue3.3指北 1、Vue2和Vue31.1、 Vue2 选项式 API vs Vue3 组合式API1.2、Vue3的优势 2、组合式API - setup2.1、setup选项2.2、setup中写代码的特点2.3、<script setup>语法糖2.4、props和context 3、组合式API - reactive和ref函数3.1、reactive3.2、ref3.3、reactive 对…

使用VisualStudio生成类图结构图for高效阅读代码

使用VisualStudio高效阅读代码 前言相关准备导入工程利用VisualStudio生成类图&#xff0c;结构体调用关系利用EnterpriseArchitect(EA)画时序图 前言 目前市面上代码阅读的IDE工具非常丰富&#xff0c;也各有千秋。由于工作经历原因&#xff0c;研发机经历过windows、Mac、Li…

【可变形注意力(1)】Multi-scale Deformable Attention Transformers 多尺度变形注意力

文章目录 前言论文 《Deformable DETR: Deformable Transformers for End-to-End Object Detection》的多尺度变形注意力的解读DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION **2.** Deformable Attention ModuleDeformable Attention Module 3. Multi-Scale Defor…

鼎汉电源模块维修DHXD-TE1直流屏充电模块

鼎汉电源模块维修常见系列包括&#xff1a;DHXD-E&#xff0c;DHXD-H1&#xff0c;DHXD-H2&#xff0c;DHXD-H3&#xff0c;DHXD-H4等系列模块维修 通信电源维修品牌&#xff1a;英可瑞,许继,艾默生,通合,动力源,九洲,华隆,合欣,泰坦等 直流屏模块故障和解决办法&#xff1a; …

统计学习方法 支持向量机(下)

文章目录 统计学习方法 支持向量机&#xff08;下&#xff09;非线性支持向量机与和核函数核技巧正定核常用核函数非线性 SVM 序列最小最优化算法两个变量二次规划的求解方法变量的选择方法SMO 算法 统计学习方法 支持向量机&#xff08;下&#xff09; 学习李航的《统计学习方…

【STM32】STM32中断体系

一、STM32的NVIC和起始代码中的ISP 1.NVIC(嵌套向量中断控制器) (1)数据手册中相关部分浏览 (2)地址映射时0地址映射到Flash或SRAM (3)中断向量表可以被人为重新映射&#xff0c;一般用来IAP中 (4)STM32采用一维的中断向量表 (5)中断优先级设置有点复杂&#xff0c;后面细说 1…

Java练习题2020-2

"统计1到N的整数中,除了1和自身之外&#xff0c;至少还能被两个数整除的数的个数 输入说明&#xff1a;整数 N(N<10000)&#xff1b; 输出说明&#xff1a;符合条件的数的个数 输入样例&#xff1a;10 输出样例&#xff1a;3 (说明&#xff1a;样例中符合条件的3个数是…