贪心算法——区间选点与最大不相交区间数

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

AcWing 905. 区间选点

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. 最大不相交区间数量

 AcWing 908. 最大不相交区间数量

最大不相交区间数==最少覆盖区间点数

因为如果几个区间能被同一个点覆盖
说明他们相交了
所以有几个点就是有几个不相交区间

感谢你能看完,如果对你有帮助的话,点个赞支持下

猜你喜欢

转载自blog.csdn.net/m0_68055637/article/details/129925631