合并区间
如果一个区间的起点夹在另一个区间的起点终点之间,那么这个区间就可以被合并。那有没有办法把对于某个区间可以合并的区间都放到一起呢?可以利用区间起点排序。说起排序,我就想到了二分查找。但是这里不行,因为需要遍历可合并的若干个区间才知道合并后区间的终点。
class Solution {
public int[][] merge(int[][] intervals) {
int len=intervals.length;
if (len<=1)
return intervals;
Arrays.sort(intervals, Comparator.comparingInt(a->a[0]));
List<int[]> merged=new ArrayList<>(len);
for(int i=0;i<len-1;i++){
if (intervals[i][1]>=intervals[i+1][0]){
intervals[i+1][0]=intervals[i][0];
intervals[i+1][1]=Math.max(intervals[i][1],intervals[i+1][1]);
}else{
merged.add(intervals[i]);
}
}
merged.add(intervals[len-1]);
return merged.toArray(new int[merged.size()][2]);
}
}