给出一个区间的集合,请合并所有重叠的区间。
示例 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] 可被视为重叠区间。
package leetCode6_4;
import java.util.Arrays;
import java.util.Comparator;
/**
* @author : caoguotao
* @date 创建时间:2019年6月5日 上午9:45:30
* @version 1.0
* @parameter
* @since
* @return
*/
public class Solution56_1 {
public static void main(String[] args) {
Solution56_1 s = new Solution56_1();
int[][] intervals = {
{1,4},
{4,5}
};
int[][] res = s.merge(intervals);
for (int i = 0; i < res.length; i++) {
System.out.println(res[i][0] + " " + res[i][1]);
}
}
public int[][] merge(int[][] intervals) {
int len = intervals.length;
//根据数组中的第一个值按照从小到大的排序
for(int i = 0; i < len; i++) {
for(int j = i + 1; j < len; j++) {
if(intervals[i][0] > intervals[j][0]) {
int a = intervals[i][0];
int b = intervals[i][1];
intervals[i][0] = intervals[j][0];
intervals[i][1] = intervals[j][1];
intervals[j][0] = a;
intervals[j][1] = b;
}
}
}
// 记录合并区间的数组
int[][] merge = new int[len][2];
if(len == 0){
return Arrays.copyOf(merge, 0);
}
// 记录合并区间的个数
int index = 0;
int start = intervals[0][0];
int end = intervals[0][1];
for (int i = 1; i < len; i++) {
// 使两区间有交集
if (intervals[i][0] >= start && intervals[i][0] <= end) {
start = Math.min(start, intervals[i][0]);
end = Math.max(end, intervals[i][1]);
}
else{
merge[index][0] = start;
merge[index][1] = end;
index++;
start = intervals[i][0];
end = intervals[i][1];
}
}
merge[index][0] = start;
merge[index][1] = end;
//截取數組後面為零的长度
merge = Arrays.copyOf(merge, ++index);
return merge;
}
}