以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
首先,要考虑数组为空的情况
if( intervals.length == 0){
return new int[0][];
}
如果数组长度为空,那么输出一个空的2维数组。
如果要合并,先对它进行一个排序,应该时按照每个区间的start来按照升序排序,这样可以从最小的数进行排序。
Arrays.sort(intervals, new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
如果按照当前的往后找,那我们会发现不好规定后一个数,于是我们用
pre = intervals[0]
同时引入一个标记j
j = 0
然后,应该按照以下原则合并
如果当前的数的start小于等于前一个数的end,那么合并,否则将前一个数单独拿出来放入intervals中,更行pre为当前intervals
for(int i = 1; i < intervals.length; i++){
int[] cur = intervals[i];
if(cur[0] <= pre[1]){
int m = Math.max(pre[1], cur[1]);
pre = new int[]{pre[0], m};
}
else{
intervals[j++] = pre;
pre = cur;
}
}
考虑靠合并情况下不需要每一个向intervals,应该需要一放在末尾
intervals[j++] = pre
最后只用返回0到j-1的内容