leetbook:中级算法
类型:排序和搜索
题目名:合并区间
原题URL:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv11yj/
题目描述
给出一个区间的集合,请合并所有重叠的区间。
示例
示例 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] 可被视为重叠区间。
限制
intervals[i][0] <= intervals[i][1]
解题思路
1.排序数组,按照数组的首位大小进行排序
2.遍历排序后的数组,如果结果集为空或者结果集的最后一个区间的右边界小于当前遍历到的位置的左边界,那么创一个新的区间加入到结果集,否则和最后一个区间进行合并
解题代码
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals==null||intervals.length==0) return new int[0][2];
Arrays.sort(intervals,new Comparator<>(){
@Override
public int compare(int[] arr1, int[] arr2) {
return arr1[0]-arr2[0];
}
});
List<int[]> list = new ArrayList<>();
for(int[] arr : intervals) {
if(list.isEmpty()||arr[0]>list.get(list.size()-1)[1]) list.add(arr);
else list.get(list.size()-1)[1] = Math.max(arr[1],list.get(list.size()-1)[1]);
}
return list.toArray(new int[list.size()][0]);
}
}