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。所以,应该比较的是消耗的总时长。
优化写法
- 尽量用加法,少用乘法
- 使用
emplace
代替push
📎 参考
- 无