当前位置: 首页 > news >正文

LeetCode 3296.移山所需的最少秒数

给你一个整数 mountainHeight 表示山的高度。

同时给你一个整数数组 workerTimes,表示工人们的工作时间(单位:秒)。

工人们需要 同时 进行工作以 降低 山的高度。对于工人 i :

山的高度降低 1,需要 workerTimes[i] 秒。
山的高度降低 2,需要 workerTimes[i] * 2 秒。

山的高度降低 x,需要 workerTimes[i] * x 秒。
工人 i 所花费的总时间是所有 x 单位所需时间的总和。由于所有工人同时操作,所需的总时间是任何工人花费的 最大 时间。

返回一个整数,表示工人们使山的高度降低到 0 所需的 最少 秒数。

示例 1:

输入: mountainHeight = 4, workerTimes = [2,1,1]

输出: 3

解释:

将山的高度降低到 0 的一种方式是:

工人 0 将高度降低 1,花费 workerTimes[0] = 2 秒。
工人 1 将高度降低 2,花费 workerTimes[1] + workerTimes[1] * 2 = 3 秒。
工人 2 将高度降低 1,花费 workerTimes[2] = 1 秒。
因为工人同时工作,所需的最少时间为 max(2, 3, 1) = 3 秒。

示例 2:

输入: mountainHeight = 10, workerTimes = [3,2,2,4]

输出: 12

解释:

工人 0 将高度降低 2,花费 workerTimes[0] + workerTimes[0] * 2 = 9 秒。
工人 1 将高度降低 3,花费 workerTimes[1] + workerTimes[1] * 2 + workerTimes[1] * 3 = 12 秒。
工人 2 将高度降低 3,花费 workerTimes[2] + workerTimes[2] * 2 + workerTimes[2] * 3 = 12 秒。
工人 3 将高度降低 2,花费 workerTimes[3] + workerTimes[3] * 2 = 12 秒。
所需的最少时间为 max(9, 12, 12, 12) = 12 秒。

示例 3:

输入: mountainHeight = 5, workerTimes = [1]

输出: 15

解释:

这个示例中只有一个工人,所以答案是 workerTimes[0] + workerTimes[0] * 2 + workerTimes[0] * 3 + workerTimes[0] * 4 + workerTimes[0] * 5 = 15 秒。

提示:

1 <= mountainHeight <= 105^55
1 <= workerTimes.length <= 104^44
1 <= workerTimes[i] <= 106^66

直接模拟,循环mountainHeight次,每次循环中一个工人降低1的高度,取工作总时间最短的那个工人,这可以用小顶堆来实现:

classSolution{public:longlongminNumberOfSeconds(intmountainHeight,vector<int>&workerTimes){vector<tuple<longlong,longlong,int>>h(workerTimes.size());for(inti=0;i<workerTimes.size();++i){h[i]={workerTimes[i],workerTimes[i],workerTimes[i]};}make_heap(h.begin(),h.end(),greater());longlongans=0;while(mountainHeight>0){// 已工作的总时间,当前使高度降低1所需时间,初始使高度降低1所需时间auto[total,need,base]=h[0];// 每次更新答案为已工作的总时间ans=total;pop_heap(h.begin(),h.end(),greater());h.back()={total+need+base,need+base,base};push_heap(h.begin(),h.end(),greater());--mountainHeight;}returnans;}};

如果山的高度为m,工人数量为n,则此算法时间复杂度为O(n+mlogn),空间复杂度为O(n)。

http://www.jsqmd.com/news/1093090/

相关文章:

  • 销售预测化技术中的趋势分析季节性调整与预测模型
  • 实战ModSecurity WAF:从DVWA靶场到自定义SQL注入防御规则
  • 排查48小时找不到根因的电力网络瘫痪 真凶竟是每秒2万个不起眼的小包
  • 金九银十真的适合跳槽吗?冷静分析求职黄金期的另一面
  • 深入解析TSB83AA23芯片:总线仲裁、PCI配置与驱动开发实战
  • go 数字人Coze智能体
  • 一张 AI 证书是否可信,课程、考试和查询机制都要看
  • HireMind:从 0 到 1,用 LangGraph 打造 7 Agent 协作的智能招聘平台
  • GPU中专业术语
  • Visual C++运行库终极修复方案:5分钟彻底解决Windows软件启动问题的完整指南
  • With 注入通用属性
  • 动画角色机器人化:从《冰雪奇缘》Olaf看强化学习与机械设计创新
  • 基于复合粒子群优化的模糊神经预测控制的研究附Matlab代码
  • go-sqlmock
  • AI数字人平台热门十三问|必火AI数字人全维度专业解答
  • 如何高效优化电子书阅读体验:Kindle Comic Converter的完整漫画转换方案
  • 卡梅德生物技术快报|羊驼纳米抗体文库筛选实操全流程:天然 / 合成文库构建与淘选参数汇总
  • Windows虚拟显示器终极指南:Parsec VDD免费开源解决方案
  • 从 0 开始学 Python:装好环境,写一下demo实例
  • Kali Linux下使用apk2url从APK提取URL与IP的实战指南
  • 高效智能的网盘直链下载解决方案:一站式专业级工具LinkSwift深度解析
  • GPU硬件故障排查终极指南:5分钟完成显卡内存稳定性检测
  • 收藏!小白程序员必看:如何将大模型Agent从Demo成功落地工程实践?
  • 2026年大模型知识库优化实战?GEO策略如何重塑TOB品牌获客新路径
  • 收藏!小白程序员必看:一文搞懂AI Agent核心原理与实战代码
  • [Android] iVCam(手机变电脑摄像头)专业版
  • 01 TCP 协议是流式协议
  • Lean 4实战指南:5个步骤掌握下一代定理证明编程语言
  • Fatal error: require(): Failed opening required...” 以及如何彻底避免它再次出现
  • 2026年AI Agent大爆发!小白程序员必看:收藏这份从入门到精通指南,抓住时代红利!