LeetCode 1665.完成所有任务的最少初始能量:排序(贪心)
【LetMeFly】1665.完成所有任务的最少初始能量排序(贪心)力扣题目链接https://leetcode.cn/problems/minimum-initial-energy-to-finish-tasks/给你一个任务数组tasks其中tasks[i] [actuali, minimumi]actuali是完成第i个任务需要耗费的实际能量。minimumi是开始第i个任务前需要达到的最低能量。比方说如果任务为[10, 12]且你当前的能量为11那么你不能开始这个任务。如果你当前的能量为13你可以完成这个任务且完成它后剩余能量为3。你可以按照任意顺序完成任务。请你返回完成所有任务的最少初始能量。示例 1输入tasks [[1,2],[2,4],[4,8]]输出8解释一开始有 8 能量我们按照如下顺序完成任务 - 完成第 3 个任务剩余能量为 8 - 4 4 。 - 完成第 2 个任务剩余能量为 4 - 2 2 。 - 完成第 1 个任务剩余能量为 2 - 1 1 。 注意到尽管我们有能量剩余但是如果一开始只有 7 能量是不能完成所有任务的因为我们无法开始第 3 个任务。示例 2输入tasks [[1,3],[2,4],[10,11],[10,12],[8,9]]输出32解释一开始有 32 能量我们按照如下顺序完成任务 - 完成第 1 个任务剩余能量为 32 - 1 31 。 - 完成第 2 个任务剩余能量为 31 - 2 29 。 - 完成第 3 个任务剩余能量为 29 - 10 19 。 - 完成第 4 个任务剩余能量为 19 - 10 9 。 - 完成第 5 个任务剩余能量为 9 - 8 1 。示例 3输入tasks [[1,7],[2,8],[3,9],[4,10],[5,11],[6,12]]输出27解释一开始有 27 能量我们按照如下顺序完成任务 - 完成第 5 个任务剩余能量为 27 - 5 22 。 - 完成第 2 个任务剩余能量为 22 - 2 20 。 - 完成第 3 个任务剩余能量为 20 - 3 17 。 - 完成第 1 个任务剩余能量为 17 - 1 16 。 - 完成第 4 个任务剩余能量为 16 - 4 12 。 - 完成第 6 个任务剩余能量为 12 - 6 6 。提示1 tasks.length 1051 actuali minimumi 104解题方法贪心单看每个task的第一个数actual不论task顺序如何actual之和都是需要被满足然后消耗掉的。单看这个总能量至少为actual之和。现在每个还多了个minimum。minimum这东西不是实际消耗的能量但是是启动这个任务所拥有的最少初始能量。minimum可能比actual多并且这多出来的部分并不会被消耗。多出来的部分被浪费了吗不一定。你也可以把这多出来的部分用到其他任务上去。例如两个任务[ [ 3 , 3 ] , [ 1 , 4 ] ] [[3, 3], [1, 4]][[3,3],[1,4]]第二个任务需要多出来3 33的能量这3 33的能量正好全部用到第一个任务上一点都不浪费。也就是说最佳策略是优先完成多出来部分比较多的任务然后把多出来的能量用到其他浪费更小的任务上去。时间复杂度O ( n log n ) O(n\log n)O(nlogn)其中n l e n ( t a s k s ) nlen(tasks)nlen(tasks)空间复杂度O ( log n ) O(\log n)O(logn)AC代码C/* * LastEditTime: 2026-05-12 16:36:57 */classSolution{public:intminimumEffort(vectorvectorinttasks){sort(tasks.begin(),tasks.end(),[](constvectorinta,constvectorintb){returna[1]-a[0]b[1]-b[0];});intans0,now0;for(vectorinttask:tasks){if(nowtask[1]){intneedtask[1]-now;nowtask[1];ansneed;}now-task[0];}returnans;}};#ifdef_DEBUG/* [[1,2],[2,4],[4,8]] 8 */intmain(){string s;while(cins){vectorvectorintvstringToVectorVector(s);Solution sol;coutsol.minimumEffort(v)endl;}return0;}#endif同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2608520.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!