合并区间java实现

class Solution {
    public int[][] merge(int[][] intervals) {
        //首先根据每个区间的第一个下标对二维数组排序
        Arrays.sort(intervals,(e1,e2)->e1[0] - e2[0]);
        ArrayList<int[]> merge = new ArrayList<>();
        //排序完成之后保证了下一个区间的起始位置一定时大于等于前一个区间的起始位置
        //合并区间的条件时前一个区间的起始位置小于的等于后一个区间的起始位置,并且后一个区间的起始位置大于等于前一个区间的结束位置,排序之后的二维数组天然满足第一个条件
        //开始和并区间
        for(int i = 0;i < intervals.length;){
            //先记录第一个区间的起始和结束位置
            int[] temp = new int[]{intervals[i][0],intervals[i][1]};
            int j = i + 1;
            //合并从该区间开始所有可以合并的区间,直到遇到一个不能合并的区间开始下一次的合并工作
            //第一个条件是为了避免二维数组中只有一个区间的情况
            while(j < intervals.length && temp[1] >= intervals[j][0]){
                temp[1] = Math.max(temp[1],intervals[j][1]);
                j++;
            }
            //合并结束后将区间加入结果集合
            merge.add(temp);
            //下一次循环需要合并的就是当前的j所在的位置
            i = j;
        }
        //处理结果集合并返回
        int[][] result = new int[merge.size()][];
        return merge.toArray(result);
    }
}

你可能感兴趣的:(java,java,开发语言,后端)