🗒️3296. 移山所需的最少秒数
2025-8-10
| 2025-8-10
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Aug 10, 2025 12:30 PM
给你一个整数 mountainHeight 表示山的高度。
同时给你一个整数数组 workerTimes,表示工人们的工作时间(单位:)。
工人们需要 同时 进行工作以 降低 山的高度。对于工人 i :
  • 山的高度降低 x,需要花费 workerTimes[i] + workerTimes[i] * 2 + ... + workerTimes[i] * x秒。例如:
    • 山的高度降低 1,需要 workerTimes[i] 秒。
    • 山的高度降低 2,需要 workerTimes[i] + workerTimes[i] * 2 秒,依此类推。
返回一个整数,表示工人们使山的高度降低到 0 所需的 最少 秒数。

堆(优先队列)§5.1 基础

上述的方法行不通,有测试用例过不去。
我们需要对方案进行更改。在上面我们只是比较了每次增加的时间,而不是比较的每个人当前的最少用时。在有些案例会存在错误,例如 {5 ,[1,7]} 这个案例。上述的逻辑会导致每次消耗 7 s 的这个人一次都不用干,但其实每次消耗 1 秒的这个人,工作到第 4 次时,就已经耗费 10 s 了。如果两个人干,其实第 10 s 已经结束了,上述代码的结果却是消耗 15 s。
所以,应该比较的是消耗的总时长。
优化写法
  1. 尽量用加法,少用乘法
  1. 使用 emplace 代替 push

📎 参考

  • 【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)
  • 1942. 最小未被占据椅子的编号2233. K 次增加后的最大乘积
    Loading...