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

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

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


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


因为如果几个区间能被同一个点覆盖

说明他们相交了

所以有几个点就是有几个不相交区间


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

相关文章
|
6天前
|
算法 测试技术 C#
C++二分查找算法:包含每个查询的最小区间
C++二分查找算法:包含每个查询的最小区间
|
6天前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1 算法训练 区间k大数查询
19 0
|
6月前
|
存储 算法 C++
C++基础算法离散化及区间合并篇
C++基础算法离散化及区间合并篇
|
6天前
|
算法 测试技术 C#
【map】【滑动窗口】C++算法:最小区间
【map】【滑动窗口】C++算法:最小区间
|
6天前
|
存储 算法 索引
算法题解-汇总区间
算法题解-汇总区间
|
6天前
|
算法 Java
算法编程(十八):汇总区间
算法编程(十八):汇总区间
35 0
|
6天前
|
算法 程序员
【算法训练-链表 一】【反转链表】反转链表、区间反转链表、K个一组反转链表
【算法训练-链表 一】【反转链表】反转链表、区间反转链表、K个一组反转链表
31 0
|
5月前
|
算法 测试技术 C#
C++ 算法:区间和的个数
C++ 算法:区间和的个数
|
5月前
|
算法 测试技术 C#
C++二分查找算法的应用:将数据流变为多个不相交区间
C++二分查找算法的应用:将数据流变为多个不相交区间
|
6月前
|
人工智能 算法
代码随想录算法训练营第三十五天 | LeetCode 435. 无重叠区间、763. 划分字母区间、56. 合并区间
代码随想录算法训练营第三十五天 | LeetCode 435. 无重叠区间、763. 划分字母区间、56. 合并区间
41 0