题解:
import java.util.Arrays;
import java.util.Scanner;
public class Practice_区间调度问题 {
public static void main(String[] args) {
/*
输入测试样例:
5
1 2 4 6 8
3 5 7 9 10
*/
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] s = new int[n];
int[] e = new int[n];
for (int i = 0; i < n; i++) {
s[i] = in.nextInt();
}
for (int i = 0; i < n; i++) {
e[i] = in.nextInt();
}
Job[] jobs = new Job[n];
for (int i = 0; i < n; i++) {
jobs[i] = new Job(s[i], e[i]);
}
Arrays.sort(jobs);
int cnt = f(n, jobs);
System.out.println(cnt);
}
private static int f(int n, Job[] jobs) {
int cnt = 1;
int y = jobs[0].e;//一开始的结束时间
for (int i = 0; i < n; i++) {
if (jobs[i].s > y) {
cnt++;
y = jobs[i].e;
}
}
return cnt;
}
private static class Job implements Comparable<Job> {
int s;
int e;
public Job(int s, int e) {
this.s = s;
this.e = e;
}
@Override
public int compareTo(Job other) {
int x = this.e - other.e;
if (x == 0) {//结束时间相同,比较开始时间
return this.s - other.s;
} else {
return x;
}
}
}
}
在这里经过分析,选择任务结束时间最早的策略才是正确的