题目地址
https://leetcode.cn/problems/minimum-time-to-complete-all-tasks/description/
思路
题解
public static int findMinimumTime(int[][] tasks) {
//先将数数组进行尾端升序排列
Arrays.sort(tasks, (a, b) -> a[1] - b[1]);
int ans = 0;
//计算得到数组中最大的值,也就是数组的末端最大值
int mx = tasks[tasks.length - 1][1];
//以数组的末端最大值创建一个标记数组
boolean[] run = new boolean[mx + 1];
for (int[] t : tasks) {
int start = t[0];
int end = t[1];
int d = t[2];
for (int i = start; i <= end; i++) {
if (run[i]) {
// 去掉运行中的时间点(也就是数组中相交的点)
d--;
}
}
// 剩余的 d 填充区间后缀
for (int i = end; d > 0; i--) {
if (!run[i]) {
// 运行
run[i] = true;
d--;
ans++;
}
}
}
return ans;
}
public static void main(String[] args) {
int[][] task = new int[][]{
{
4,5,1},{
2,3,1},{
1,5,2}
};
findMinimumTime(task);
}