import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class Mergelntervals {
    //按区间左边界排序
    public int[][] merge(int[][] intervals) {
        //定义一个结果数组
        ArrayList<int[]> result = new ArrayList<>();

        //1.将所有区间按照左边界排序
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0];
            }
        });

        //2.遍历排序后的区间,逐个合并
        for (int[] interval : intervals) {
            //记录当前的左右边界
            int left = interval[0],right = interval[1];
            //获取结果数组长度
            int length = result.size();
            //如果left比最后一个区间右边界大,不能合并,直接添加到结果
            if(length==0||left>result.get(length-1)[1]){
                result.add(interval);
            }else {
                //可以合并
                int mergedLeft = result.get(length-1)[0];
                int mergedRight = Math.max(result.get(length-1)[1],right);
                result.set(length-1,new int[]{mergedLeft,mergedRight});
            }
        }
        return result.toArray(new int[result.size()][]);
    }

    public static void main(String[] args) {
        int[][] intervals = {{1,3}, {2,6}, {8,10}, {15,18}};
        Mergelntervals mergelntervals = new Mergelntervals();
        for (int[] interval :mergelntervals.merge(intervals)) {
           printArray(interval);
        }
    }

    public static void printArray(int[] arr){
        for (int num:arr) {
            System.out.print(num+"\t");
        }
        System.out.println();
    }
}