【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/take-gifts-from-the-richest-pile/description/?envType=daily-question&envId=2023-10-28
给你一个整数数组 gifts
,表示各堆礼物的数量。每一秒,你需要执行以下操作:
- 选择礼物数量最多的那一堆。
- 如果不止一堆都符合礼物数量最多,从中选择任一堆即可。
- 选中的那一堆留下平方根数量的礼物(向下取整),取走其他的礼物。
返回在 k
秒后剩下的礼物数量。
示例 1:
输入:gifts = [25,64,9,4,100], k = 4 输出:29 解释: 按下述方式取走礼物: - 在第一秒,选中最后一堆,剩下 10 个礼物。 - 接着第二秒选中第二堆礼物,剩下 8 个礼物。 - 然后选中第一堆礼物,剩下 5 个礼物。 - 最后,再次选中最后一堆礼物,剩下 3 个礼物。 最后剩下的礼物数量分别是 [5,8,9,4,3] ,所以,剩下礼物的总数量是 29 。
示例 2:
输入:gifts = [1,1,1,1], k = 4 输出:4 解释: 在本例中,不管选中哪一堆礼物,都必须剩下 1 个礼物。 也就是说,你无法获取任一堆中的礼物。 所以,剩下礼物的总数量是 4 。
自己的思路
这道题目简单地来说,是给最小元素开平方,以示例1为例
先给数组gifts排序,给最后一个元素,即最大的元素开平方。循环4次。
代码
class Solution {public long pickGifts(int[] gifts, int k) {int len = gifts.length;for (int i = 0; i < k; i++) {Arrays.sort(gifts);gifts[len - 1] = (int) Math.sqrt(gifts[len -1]);}long res = 0;for (int i = 0; i < len; i++) {res += gifts[i];}return res;}
}
力扣官方题解
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/take-gifts-from-the-richest-pile/solutions/2477680/cong-shu-liang-zui-duo-de-dui-qu-zou-li-kt246/
最大堆
思想感觉和我的差不多,不同的是它使用了一个优先队列(PriorityQueue) pq,并且使用了一个自定义的比较器,将较大的礼物排在前面。而我每次都需要重新排序。
比较器
定义是在创建优先队列时传入的参数,也就是在创建 PriorityQueue<Integer>
对象时,通过 lambda 表达式来定义的比较器。
在这段代码中,比较器的定义使用了箭头函数 (a, b) -> b - a
。箭头函数的左边是输入参数,即要比较的两个整数 a 和 b;箭头函数的右边是返回值,即要比较的结果。既然返回值是 a - b,那么比较器的规则就是按照从大到小的顺序对整数进行排序。
具体来说,当 a > b 时,a - b 的值为正数,返回值为正数,表示 a 在 b 的前面;当 a = b 时,a - b 的值为零,返回值为零,表示 a 和 b 相等,顺序不变;当 a < b 时,a - b 的值为负数,返回值为负数,表示 a 在 b 的后面。
因此,通过定义这个自定义的比较器,代码创建的优先队列 pq 会按照从大到小的顺序存储礼物的价值。这样,在每次取出最大值和加入平方根后的操作中,总是可以保证 pq 中的最大值是当前最有价值的礼物。
代码
class Solution {public long pickGifts(int[] gifts, int k) {PriorityQueue<Integer> pq = new PriorityQueue<Integer>((a, b) -> b - a);for (int gift : gifts) {pq.offer(gift);}while (k > 0) {k--;int x = pq.poll();pq.offer((int) Math.sqrt(x));}long res = 0;while (!pq.isEmpty()) {res += pq.poll();}return res;}
}
相关文章:

【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/take-gifts-from-the-richest-pi…...
LeetCode 每日一题 2023/10/23-2023/10/29
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 10/23 2678. 老人的数目10/24 1155. 掷骰子等于目标和的方法数10/25 2698. 求一个整数的惩罚数10/26 2520. 统计能整除数字的位数10/27 1465. 切割后面积最大的蛋糕10/28 2…...
Android:Installed Build Tools revision 33.0.2 is corrupted.
Remove and install again using the SDK Manager. 使用33.0.2及以上版本的build-tools编译Android应用时。 有些人会按照提示去SDK Manager中重新安装build tools,然后发现这样做是无用的 编译时会收到:Build-tool 33.0.2 is missing DX at D:\Sdk\b…...

语法复习之C语言与指针
内存是如何存储数据的? 在C语言中定义一个变量后,系统就会为其分配内存空间。这个内存空间包括了地址和长度。将变量赋值后,该值就被写入到了指定的内存空间中。内存空间的大小一般以字节作为基本单位。 普通变量存放的是数据,…...

vue笔记(二)
7、事件处理 7.1、事件的基本处理 事件的使用 使用v-on:xxx或者用xxx绑定事件,其中XXX是事件名事件的回调需要配置在methods对象中,最终出现在VM上methods配置的函数,不需要箭头函数 <div id"root"><h1>…...
【IT行业就业前景广阔:探讨热门方向与就业机会】
IT行业哪个方向比较好就业? IT行业是一个快速发展的领域,与许多其他行业紧密结合,为各个行业带来了巨大的变革和机遇。在这个充满活力的行业中,有许多就业方向可以选择。让我们一起来探讨一下IT行业的发展背景、就业方向以及分享一些就业经…...

linux上java -jar方式运行项目及输出文件nohup.out的清理, linux上定时器的用法
linux上java -jar方式运行项目及输出文件nohup.out的清理, linux上定时器的用法 linux上java -jar方式运行定期自动清理nohup.out文件的内容**验证**定时器crontab使用时注意事项 linux上java -jar方式运行 参考:https://blog.csdn.net/qq_42169450/arti…...

macOS 12 Monterey v12.7.1正式版:开启全新的操作系统体验
macOS 12 Monterey已经向所有兼容的Mac设备推出,为您带来了一系列强大的新功能和改进。这个全新的操作系统版本,不仅带来了更流畅的用户体验,还增强了与iOS设备的无缝集成,让您的设备使用更加高效,更加便捷。 macOS 1…...
vue制作防止用户未登录或未填写信息就跳转页面的路由拦截器
在Vue中,你可以使用路由导航守卫来实现防止未登录用户跳转页面的路由拦截器。 首先,你需要创建一个全局前置守卫,用于检查用户是否已登录。在router/index.js文件中,添加如下代码: import router from /router;route…...

postgis ST_CoverageInvalidEdges用法
官方文档 概要 geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance 0); 描述 一个窗口函数,用于检查窗口分区中的多边形是否形成有效的多边形覆盖范围。 它返回线性指示器,显示每个多边形中无效边(如果有&#x…...
sqlalchemy的部分函数合集
func.concat func.group_concat func.find_in_set func.sum func.left func.month func.round func.avg func.rpad func.ifnull func.replace func.date_format CONCAT 函数:将两个或多个字符串连接在一起。例如: SELECT CONCAT(Hello, , World) AS r…...
mac苹果电脑使用日常
让鼠标和触摸板滚动方向一致:使用 Scroll Reverser 软件。 参考:Mac上鼠标滚轮方向是和Win相反的,系统中设置后触摸板的方向又跟着变了 操作: 截屏:shift command 3 复制粘贴:cmdc cmdv 剪切粘贴&#x…...

多线程面试相关知识点
文章目录 (一) 进程线程和协程的区别创建线程的4种方式1. 继承Thread类2. 实现runnable接口3. 实现Callable接口4. 线程池创建 runnable 和 callable 有什么区别线程的 run()和 start()有什么区别?线程之间的状态变化notify()和 notifyAll()有什么区别?j…...
关于生成式人工智能模型应用的调研
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:A survey of Generative AI Applications 链接:https://arxiv.org/abs/2306.02781 摘要 生成式人工智能(Generative AI)近年来经历了显著的增长&…...
【问题】在安装torchvision的时候,会自动安装torch?
1 背景👇🏻👇🏻👇🏻 在使用如下命令安装torchvision的时候,发现之前已安装的torch被卸载了。 pip install torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple 2 分析🐰&a…...
MySQL数据库备份实战
一、为什么进行数据库备份? 保证业务连续性:数据库中存储着企业的核心业务数据,如果数据丢失或损坏,将会对企业的业务运营产生重大影响。通过定期备份数据库,可以在系统故障或数据丢失时快速恢复数据,保证业务的连续性。 保护数据资产:数据库中存储着企业的重要数据资产…...

每日一题 2558. 从数量最多的堆取走礼物(简单,heapq)
怎么这么多天都是简单题,不多说了 class Solution:def pickGifts(self, gifts: List[int], k: int) -> int:gifts [-gift for gift in gifts]heapify(gifts)for i in range(k):heappush(gifts, -int(sqrt(-heappop(gifts))))return -sum(gifts)...
JavaScript中的Promise
JavaScript中的Promise是一种异步编程的解决方案,它可以避免回调地狱,使代码更加简洁和易于维护。本文将详细介绍Promise的API及其使用案例,并附有代码注释。 Promise的API Promise构造函数 Promise构造函数用于创建一个Promise实例&#…...

【OpenCV实现图像的几何变换】
文章目录 概要:OpenCV实现图像的几何变换、图像阈值和平滑图像变换小结 概要:OpenCV实现图像的几何变换、图像阈值和平滑图像 使用OpenCV库进行图像处理的三个重要主题:几何变换、图像阈值处理以及图像平滑。在几何变换部分,详细…...

2023MathorCup(妈妈杯) 数学建模挑战赛 解题思路
云顶数模最新解题思路免费分享~~ 2023妈妈杯数学建模A题B题思路,供大家参考~~ A题 B题...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...