合并区间
java
解决思路
- 首先将区间根据第一顺序左端点升序,第二顺序右端点升序排序。list 用于存储不重叠区间
- 遍历 intervals,当前区间为 interval,如果 list 为空,或者 list 最后一个区间的右端点小于当前区间的左端点,区间不重叠,直接加入;否则,将 list 最后一个区间的右端点设为之前的区间和当前区间右端点的取大值
- 将 list 转为 数组存入 intervals
- return intervals
- 题解思路:(1)排序
相关问题
- 区间的右端点应该取大,因为会有包含关系
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] != o2[0]) {
return Integer.compare(o1[0], o2[0]);
} else {
return Integer.compare(o1[1], o2[1]);
}
}
});
ArrayList<int[]> list = new ArrayList<>();
for (int[] interval : intervals) {
if (list.size()==0||list.get(list.size()-1)[1]<interval[0]) {
list.add(interval);
}else {
int[] a= list.get(list.size()-1);
list.set(list.size()-1,new int[]{a[0],Math.max(a[1],interval[1])});
}
}
intervals = list.toArray(new int[list.size()][2]);
return intervals;
}
}