AcWing 905. 区间选点
1.题目
给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。
输出选择的点的最小数量。
位于区间端点上的点也算作区间内。
输入格式
第一行包含整数 N,表示区间数。
接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。
输出格式
输出一个整数,表示所需的点的最小数量。
数据范围
1≤N≤10的5次,
−10的9次≤ai≤bi≤10的9次
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
2.思路
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int N=100010;
static int [][]he=new int[N][2];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for (int i = 0; i < n; i++) {
he[i][0]=sc.nextInt();
he[i][1]=sc.nextInt();
}
//按左端点大小冒泡排序
Arrays.sort(he,0,n,(a,b)->(a[0]-b[0]));
//从最左边的区间开始依次遍历,这个点是否包含在下一个区间,不含则要增加一个点并更新
int l=he[0][0];
int r=he[0][1];
int res=1;
for (int i = 1; i < n; i++) {
if(he[i][0] >r){
res++;
l=he[i][0];
r=he[i][1];
}else r=Math.min(r,he[i][1]);
}
System.out.println(res);
}
}
AcWing 908. 最大不相交区间数量
最大不相交区间数==最少覆盖区间点数
因为如果几个区间能被同一个点覆盖
说明他们相交了
所以有几个点就是有几个不相交区间
感谢你能看完,如果对你有帮助的话,点个赞支持下