56. 合并区间

题目描述

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: intervals = [[1,3],[2,6],[8,10],[15,18]]

输出: [[1,6],[8,10],[15,18]]

解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: intervals = [[1,4],[4,5]]

输出: [[1,5]]

解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

注意:输入类型已于2019年4月15日更改。 请重置默认代码定义以获取新方法签名。

提示:

  • intervals[i][0] <= intervals[i][1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

先按照第一列的数字进行从小到大排序,接下来考虑相邻两区间情况:包含,相交,相离。
可以创建新的数组,也可以在原数组上进行操作。

class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals,(x1,x2) -> x1[0]-x2[0]);
        // int res = new int[intervals.length][2];
        int index = -1;
        for(int[] interval:intervals){
            if(index == -1 || interval[0] > intervals[index][1]){
                intervals[++index] = interval;
            }else if(interval[0] <= intervals[index][1]){
                intervals[index][1] = Math.max(interval[1],intervals[index][1]);
            }
        }
        return Arrays.copyOf(intervals,index+1);
    }
}
上一篇:role menu for SAP_UI2_ADMIN_700


下一篇:LeeCode( 模拟)57_插入区间