- 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
示例 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] 可被视为重叠区间。
和题解的差不多。
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals,(a,b)->a[0]-b[0]);
//按照数组中的第一个值来进行排列。a[1]是表示按照第二个值来进行排列
List<int[]> ans = new ArrayList<int[]>();
//先加入第一个区间
ans.add(intervals[0]);
for(int i=1;i<intervals.length;i++){
int f=0;//标记记录ans中是否含满足与ans中的区间进行合并的条件,如果不满就单独加入到ans中
for(int j=0;j <ans.size();j++){
//当后面的某个区间的start 小于或者等于 前某个区间的end时,可能可以进行合并
if(intervals[i][0] <= ans.get(j)[1]){
f=1;
//当后面的某个区间的end 小于或者等于 前某个区间的end时,才进行合并
if(intervals[i][1] > ans.get(j)[1]){
//蒋ans中的区间的end进行更新。
ans.get(j)[1]=intervals[i][1];
}
}
}
if(f==0){
ans.add(intervals[i]);
}
}
// for(int i=0;i<ans.size();i++){
// System.out.println(ans.get(i)[0]+" "+ans.get(i)[1]);
// }
return ans.toArray(new int[ans.size()][]);
}
}