博客
关于我
AcWing 908. 最大不相交区间数量(贪心:同区间选点)
阅读量:355 次
发布时间:2019-03-04

本文共 1654 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要找到数轴上最多的不相交区间。我们可以使用贪心算法来解决这个问题,这种算法通常能找到最优解,尤其是在区间调度问题中。

方法思路

  • 问题分析:我们需要选择尽可能多的区间,使得这些区间之间互不相交(包括端点)。如果两个区间的端点相同,它们也不能同时被选中。
  • 贪心算法:贪心算法的基本思想是总是选择当前最优解,以期望得到全局最优解。在区间调度问题中,我们可以通过排序区间来实现这一点。
  • 排序策略:首先将区间按照左端点排序,如果左端点相同,则按右端点排序,右端点较大的排在前面。这样可以确保我们总是选择覆盖最长范围的区间,从而为后面的选择留下更多空间。
  • 遍历检查:初始化当前区间的右端点为负无穷,遍历每个区间,如果当前区间的左端点大于当前右端点,则选中该区间,并更新当前右端点。
  • 解决代码

    import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;public class Main {    static int n = 0, N = 100010;    public static void main(String[] args) throws Exception {        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));        n = Integer.valueOf(buf.readLine());        int[][] nums = new int[n][2];        int t = 0;        while (n-- != 0) {            String[] info = buf.readLine().split(" ");            int a = Integer.valueOf(info[0]);            int b = Integer.valueOf(info[1]);            nums[t][0] = a;            nums[t][1] = b;            t++;        }        Arrays.sort(nums, (a, b) -> {            if (a[0] != b[0]) {                return Integer.compare(a[0], b[0]);            } else {                return Integer.compare(b[1], a[1]);            }        });        int right = -Integer.MAX_VALUE;        int cnt = 0;        for (int i = 0; i < nums.length; i++) {            if (nums[i][0] > right) {                cnt++;                right = nums[i][1];            }        }        System.out.print(cnt);    }}

    代码解释

  • 读取输入:使用 BufferedReader 读取输入数据,解析区间端点。
  • 排序区间:将区间按照左端点排序,如果左端点相同,则按右端点排序,右端点较大的排在前面。
  • 遍历区间:初始化当前区间右端点为负无穷,遍历每个区间,如果当前区间的左端点大于当前右端点,则选中该区间,并更新当前右端点。
  • 输出结果:输出选中的区间数量。
  • 这种方法确保了我们总是选择最优的区间,从而得到最多的不相交区间数量。

    转载地址:http://vyre.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NI笔试——大数加法
    查看>>