LeetCode56. 合并区间
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
解题思路:
这个题目其实代码比较好理解,难点是其中有几个关于集合的api方法需要好好熟悉一下。具体看下面的代码:
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals==null || intervals.length==0) return new int[][]{};
//保存的结果集
List<int[]> result=new ArrayList<>();
//将原集合进行排序
Arrays.sort(intervals,(a,b)->(a[0]-b[0]));
int currentA=intervals[0][0];
int currentB=intervals[0][1];
for(int i=1;i<intervals.length;i++){
//两个单独的没有重叠的话,直接加入结果集
if(currentB<intervals[i][0]){
result.add(new int[]{currentA,currentB});
currentA=intervals[i][0];
currentB=intervals[i][1];
}
else{
//两个结合有重叠的地方
currentB=Math.max(currentB,intervals[i][1]);
}
}
//下面这一步骤很重要,就是当所有的集合都有重复的交集元素的时候,左后需要将currentA和currentB加入到结果集里面
result.add(new int[]{currentA,currentB});
int[][] returnResult=new int[result.size()][2];
//集合转数组
result.toArray(returnResult);
//注意转换到的结果是到括号里的数组里面
return returnResult;
}
}