LeetCode 3296.移山所需的最少秒数:优先队列
【LetMeFly】3296.移山所需的最少秒数优先队列力扣题目链接https://leetcode.cn/problems/minimum-number-of-seconds-to-make-mountain-height-zero/给你一个整数mountainHeight表示山的高度。同时给你一个整数数组workerTimes表示工人们的工作时间单位秒。工人们需要同时进行工作以降低山的高度。对于工人i:山的高度降低x需要花费workerTimes[i] workerTimes[i] * 2 ... workerTimes[i] * x秒。例如ul li山的高度降低 1需要 codeworkerTimes[i]/code 秒。/li li山的高度降低 2需要 codeworkerTimes[i] workerTimes[i] * 2/code 秒依此类推。/li /ul /li返回一个整数表示工人们使山的高度降低到 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 1051 workerTimes.length 1041 workerTimes[i] 106解题方法优先队列使用一个优先队列每次选完工最早的工人降低1个山高。工人完工后可以再次进入队列只不过再次进入队列后的下次工作耗时更久而已。具体来说优先队列中存放每个工人的(完工时间, 共计降低高度, baseTime)共计降低高度和baseTime都是为了计算完工时间。时间复杂度O ( h e i g h t × log n ) O(height\times \log n)O(height×logn)空间复杂度O ( n ) O(n)O(n)AC代码C/* * LastEditTime: 2026-03-13 22:57:56 */typedeflonglongll;classSolution{public:llminNumberOfSeconds(intmountainHeight,vectorintworkerTimes){priority_queuetuplell,ll,int,vectortuplell,ll,int,greaterpq;for(intt:workerTimes){pq.push({t,1,t});}ll ans0;while(mountainHeight--){auto[now,times,once]pq.top();pq.pop();ansnow;pq.push({nowtimes*once,times,once});}returnans;}};同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2409180.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!