题目描述
给出一个区间的集合,请合并所有重叠的区间。
示例 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);
}
}