56. Merge Intervals

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

【解析】
题意:有很多个区间,把有重叠的区间合并。
思路:先排序,然后检查相邻两个区间,看前一个区间的结尾是否大于后一个区间的开始,注意前一个区间包含后一个区间的情况。

    public int[][] merge(int[][] intervals) {
        List res = new ArrayList<>();
        if(intervals.length == 0 || intervals == null) return res.toArray(new int[0][]);

        Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));

        int start = intervals[0][0];
        int end = intervals[0][1];

        for(int[] i : intervals) {
            if(i[0] <= end) {
                end = Math.max(end, i[1]);//后一个区间开始是否大于前一个区间的结尾
            }
            else {
                res.add(new int[]{start, end});//发现不满足的加入临时数组
                start = i[0];
                end = i[1];
            }
        }
        res.add(new int[]{start, end});
        return res.toArray(new int[0][]);

    }

你可能感兴趣的:(56. Merge Intervals)