题目:
给一个区间的集合,然后合并有重叠的区间;
例如:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
思路:
1.首先按每个区间的第一个数字排序集合;时间复杂度为O(nlogn);
2.对比每两个区间,若有重叠就合并;否则的话就直接添加;
class Solution{
public int[][] merge(int[][] intervals) {
if(intervals.length<=1)
return intervals;
}
Arrays.sort(intervals,(i1,i2)->Integer.compare(i1[0],i2[0]));//排序
List<int[]> res=new ArrayList<>();
int[] newIntervals=intervals[0];
res.add(newIntervals);
for(int[] interval:intervals){
//重叠的话
if(interval[0]<=newIntervals[1]){
newIntervals[1]=Math.max(newIntervals[1],interval[1]);
}else{
newIntervals=interval;
res.add(newIntervals);
}
}
return res.toArray(new int[res.size()][]);
}
时间复杂度:区间集合排序时间复杂度O(nlogn),合并时间复杂度O(n),故总体复杂度为O(nlogn);