枫原万叶


私信TA

用户名:dotcpp0605256

访问量:212

签 名:

等  级
排  名 22270
经  验 614
参赛次数 0
文章发表 7
年  龄 0
在职情况 学生
学  校 怀化学院
专  业

  自我简介:

TA的其他文章

解题思路:

注意事项:

参考代码:

import java.util.*; // 导入Java的util包,它包含了很多有用的数据结构和工具类

public class Main { // 定义一个名为Main的公共类

    static class Pair implements Comparable<Pair> { // 在Main类内部定义一个静态内部类Pair,并实现Comparable接口以便排序
        int l, r; // Pair类有两个整数成员变量l和r,代表一个区间的左右端点

        public Pair(int l, int r) { // Pair类的构造函数,用于初始化l和r
            this.l = l; // 使用this关键字明确指定我们正在设置的是实例变量l
            this.r = r; // 使用this关键字明确指定我们正在设置的是实例变量r
        }

        @Override // 重写Comparable接口的compareTo方法,以便我们可以对Pair对象进行排序
        public int compareTo(Pair other) { // compareTo方法接收一个Pair类型的参数other,用于与当前对象进行比较
            return Integer.compare(this.l, other.l); // 使用Integer类的compare方法比较当前对象的l成员变量和other对象的l成员变量,并返回比较结果
        }
    }

    public static void main(String[] args) { // 主函数,程序执行的入口点
        Scanner sc = new Scanner(System.in); // 创建一个Scanner对象sc,用于从标准输入读取数据
        int n = sc.nextInt(); // 读取一个整数n,代表区间的数量
        ArrayList<Pair> lis = new ArrayList<>(); // 创建一个ArrayList对象lis,用于存储Pair对象(即区间)
        for (int i = 0; i < n; i++) { // 使用for循环读取n个区间,并将它们添加到lis中
            int l = sc.nextInt(); // 读取一个整数l,代表区间的左端点
            int r = sc.nextInt(); // 读取一个整数r,代表区间的右端点
            lis.add(new Pair(l, r)); // 创建一个新的Pair对象(即一个新的区间),并将其添加到lis中
        }
        Collections.sort(lis); // 使用Collections类的sort方法对lis进行排序(根据Pair对象的l成员变量进行升序排序)
        Pair lisSorted = lis.get(0); // 获取排序后的lis中的第一个Pair对象(即左端点最小的区间),并将其存储在lisSorted中
        for (int i = 1; i < n; i++) { // 遍历lis中剩余的Pair对象(即区间)
            if (lis.get(i).l <= lisSorted.r) { // 如果当前区间的左端点小于等于lisSorted区间的右端点,说明它们可以合并
                lisSorted.r = Math.max(lis.get(i).r, lisSorted.r); // 更新lisSorted区间的右端点,使其等于当前区间和lisSorted区间中右端点较大的那个
            } else { // 如果当前区间的左端点大于lisSorted区间的右端点,说明它们不能合并,直接输出"no"并结束程序执行
                System.out.println("no"); // 输出"no"表示无法合并所有区间为一个区间
                return; // 结束主函数的执行(即结束程序的执行)
            }
        }
        System.out.println(lisSorted.l + " " + lisSorted.r); // 如果所有区间都可以合并为一个区间,则输出合并后的区间的左右端点(即lisSorted的l和r成员变量)作为结果
    }
}
 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区