题目描述
设有个n活动的集合E={1,2,..,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间sis_isi和一个结束时间fif_ifi,且si
解法:
贪心,将集合按照右括号从小到大排序,如果右括号相等,则按照左括号从小到大排序。从头遍历前一个有括号小于下一个左括号的个数
代码如下:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[][] ranges = new int[n][2];
for (int i = 0; i < n; i++) {
ranges[i][0] = scanner.nextInt();
ranges[i][1] = scanner.nextInt();
}
Arrays.sort(ranges, (o1, o2) -> {
if (o1[1] == o2[1]) {
return o1[0] - o2[0];
} else {
return o1[1] - o2[1];
}
});
int ans = 0;
int end = 0;
for (int[] range : ranges) {
if (range[0] >= end) {
ans += 1;
end = range[1];
}
}
System.out.println(ans);
}
}