题目描述:
在某个项目中有多个任务(用 tasks 数组表示)需要您进行处理,其中 tasks[i] = [si, ei],你可以在 si <= day <= ei 中的任意一天处理该任务。请返回你可以处理的最大任务数。
注:一天可以完成一个任务的处理。
输入描述:
第一行为任务数量 n,1 <= n <= 100000。后面 n 行表示各个任务的开始时间和终止时间,用 si 和 ei 表示,1 <= si <= ei <= 100000。
输出描述:
输出为一个整数,表示可以处理的最大任务数。
示例1
输入:
3
1 1
1 2
1 3
输出:
3
说明:
第一天处理任务 1,第二天处理任务 2,第三天处理任务 3。
代码
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();//任务数
List<Rw> rws = new ArrayList<Rw>();
for (int i = 0; i < n; i++) {
int beg = in.nextInt();
int eed = in.nextInt();
rws.add(new Rw(beg, eed));
}
Collections.sort(rws);
System.out.println(rws);
int begT=rws.get(0).beg;//处理任务开始时间
int endT=rws.get(rws.size()-1).end;//处理任务结束时间
int sum=0;
for (int i = begT; i <= endT; i++) {
for (Rw rw : rws) {
if (rw.beg <= i&&rw.end >= i) {
sum++;
rws.remove(rw);
break;
}
}
}
System.out.println(sum);
}
}
class Rw implements Comparable<Rw>{
int beg;
int end;
public Rw(int beg, int end) {
this.beg = beg;
this.end = end;
}
@Override
public String toString() {
return "Rw{" +
"beg=" + beg +
", end=" + end +
'}';
}
@Override
public int compareTo(Rw o) {
if (this.end == o.end)
return this.beg - o.beg;
return this.end - o.end;
}
}