import java.util.*;
/*
* public class Interval {
* int start;
* int end;
* public Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param intervals Interval类ArrayList
* @return Interval类ArrayList
*/
public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
// write code here
ArrayList<Interval> res = new ArrayList<>();
ArrayList<int[]> events = new ArrayList<>();
for (Interval cur : intervals) {
events.add(new int[] {cur.start, -1}); //开始事件
events.add(new int[] {cur.end, 1}); //结束事件
}
Collections.sort(events, (a, b)-> {
if (a[0] != b[0])return a[0] - b[0];
else return a[1] - b[1]; //相同时间开始事件在前
});
int count = 0;
int curStartTime = 0;
for (int[] eve : events) {
if (eve[1] == -1) {
if (count == 0) curStartTime = eve[0];
count++;
} else {
count--;
if (count == 0) {
res.add(new Interval(curStartTime, eve[0]));
}
}
}
return res;
}
public ArrayList<Interval> merge2 (ArrayList<Interval> intervals) {
// write code here
Collections.sort(intervals, (a, b)->a.start - b.start);
ArrayList<Interval> res = new ArrayList<>();
for (Interval cur : intervals) {
if (res.isEmpty() || res.get(res.size() - 1).end < cur.start) {
res.add(new Interval(cur.start, cur.end));
} else {
// 合并区间,更新 end
Interval last = res.get(res.size() - 1);
last.end = Math.max(last.end, cur.end);
}
}
return res;
}
}