编辑代码

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;

public class Ation {
    // 定义一个内部类,表示一个区间
    public static class SectionItem {
        public int start; // 区间起点
        public int end; // 区间终点

        // 构造函数,用于初始化一个区间
        public SectionItem(int start, int end) {
            this.start = start;
            this.end = end;
        }
    }

    // 找到不相交的区间
    public static LinkedList<SectionItem> findUncrossedSections(SectionItem[] sections) {
        // 用于记录找到的不相交的区间
        LinkedList<SectionItem> uncrosssedSections = new LinkedList<SectionItem>(); 

        // 对区间按照终点从小到大排序,方便查找不相交的区间
        Arrays.sort(sections, new Comparator<SectionItem>() {
            public int compare(SectionItem left, SectionItem right) {
                if (left.end < right.end){ // 如果左区间终点小于右区间终点
                    return -1; // 返回-1,表示左区间排在前面
                } else if (left.end == right.end) { // 如果两个区间终点相等
                    return 0; // 返回0,表示两个区间相等
                } else { // 如果左区间终点大于右区间终点
                    return 1; // 返回1,表示右区间排在前面
                }
            }
        }); 

        // 找出不相交的区间
        uncrosssedSections.add(sections[0]); // 先把第一个区间加入结果集中
        for (int i = 1; i < sections.length; i++) {
            SectionItem last = uncrosssedSections.getLast(); // 获取最后一个已经加入结果集的区间
            if (last.end <= sections[i].start) { // 如果最后一个区间的终点小于等于当前区间的起点,说明两个区间不相交
                uncrosssedSections.add(sections[i]); // 将当前区间加入结果集
            }
        }

        return uncrosssedSections;
    }

    public static void test() {
        // 创建多个区间
        SectionItem[] sections = {
            new SectionItem(2, 8),
            new SectionItem(2, 6),
            new SectionItem(3, 7),
            new SectionItem(1, 5),
            new SectionItem(3, 9),
            new SectionItem(8, 10),
        };

        // 调用函数找到不相交的区间
        LinkedList<SectionItem> uncrossedSections = findUncrossedSections(sections);

        // 输出找到的不相交的区间
        System.out.println("找到如下不相交的区间:");
        for (int i = 0; i < uncrossedSections.size(); ++i) {
            System.out.println("(" + uncrossedSections.get(i).start + "," + uncrossedSections.get(i).end + ")");
        }
    }

    public static void main(String[] args) {
        test();
    }   
}