56. 合并区间
题目链接
自定义比较器排序
- 按照左端点排序,若与前一个区间不重叠,则加入list
- 若与前一个区间重叠,则用右端点去更新前一个区间的右端点
- 注意:
- 自定义比较器需要传入Comparator对象,并且重写compare方法,第一个参数比第二个参数大时,返回正数
- List转数组时,需要传入对应类型的数组作为参数,来存储结果
class Solution {
public int[][] merge(int[][] intervals) {
int len = intervals.length;
if (len == 0) return new int [0][2];
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] interval1, int[] interval2) {
return interval1[0] - interval2[0];
}
});
List<int[]> ans = new ArrayList<>();
for (int[] interval: intervals) {
int L = interval[0], R = interval[1];
if (ans.isEmpty() || ans.get(ans.size() - 1)[1] < L)
ans.add(new int[]{L, R});
else ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], R);
}
return ans.toArray(new int[ans.size() - 1][]);
}
}