X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。
(注:起点或终点重叠,不算重叠)。例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。
思路:
以结束时间排序,最先结束就可以更早的开始,这样才会更多的进行任务
代码:
package _51_node.greedy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class ex_1133 {
/**
* 1133 不重叠的线段
* 1 秒 131,072 KB 10 分 2 级题
* X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。
* (注:起点或终点重叠,不算重叠)。例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。
*
*
* @param args
*/
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
ArrayList<Point> arrayList = new ArrayList<>();
for (int i = 1; i <= n; i++) {
int a = cin.nextInt();
int b = cin.nextInt();
arrayList.add(new Point(a, b));
}
cin.close();
Collections.sort(arrayList, new Comparator<Point>() {
@Override
public int compare(Point o1, Point o2) {
return o1.end - o2.end;
}
});
long ans = 0, t = (long)-1e9;
for (int i = 0; i < arrayList.size(); i++) {
if(arrayList.get(i).start >= t) {
t = arrayList.get(i).end;
ans++;
}
}
System.out.println(ans);
}
static class Point {
int start;
int end;
public Point(int start, int end) {
this.start = start;
this.end = end;
}
}
}