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. 最大不相交区间数量
最大不相交区间数==最少覆盖区间点数
因为如果几个区间能被同一个点覆盖
说明他们相交了
所以有几个点就是有几个不相交区间
感谢你能看完,如果对你有帮助的话,点个赞支持下