1665. 完成所有任务的最少初始能量 - 力扣(LeetCode)
1665. 完成所有任务的最少初始能量 - 给你一个任务数组 tasks ,其中 tasks[i] = [actuali, minimumi] : * actuali 是完成第 i 个任务 需要耗费 的实际能量。 * minimumi 是开始第 i 个任务前需要达到的最低能量。 比方说,如果任务为 [10, 12] 且你当前的能量为 11 ,那么你不能开始这个任务。如果你当前的能量为 13 ,你可以完成这个任务,且完成它后剩余能量为 3 。 你可以按照...
思路
我一开始的思路是,按差值降序排列,优先完成差值最大的任务,然后累计实际消耗并尽可能的复用这份差值。
结果写代码的时候直接tab出来了,而且比我的思路还简单。 ![]()
看起来思路应该是,按差值升序排列,从差额最小的任务开始累计,每次在必要能量(ans+task[0])与最低能量(task[1])中取最大值以保证本次任务能够进行。
代码
public int minimumEffort(int[][] tasks) {
Arrays.sort(tasks, Comparator.comparingInt(a -> (a[1] - a[0])));
int ans = 0;
for (int[] task : tasks) {
ans = Math.max(ans + task[0], task[1]);
}
return ans;
}
2 个帖子 - 2 位参与者