1. 题目
2. 思路
(1) 模拟法
- 首先按照start对区间进行排序,然后遍历区间,同时维护前一个区间的start和end。
- 若当前区间的start<=前一个区间的end,则将当前区间与前一个区间合并,并更新前一个区间的end;否则,将前一个区间加入结果集,同时更新start和end。
3. 代码
import java.util.ArrayList;
import java.util.Collections;
public class Test {
public static void main(String[] args) {
}
}
class Interval {
int start;
int end;
Interval() {
start = 0;
end = 0;
}
Interval(int s, int e) {
start = s;
end = e;
}
}
class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
int n = intervals.size();
ArrayList<Interval> res = new ArrayList<>();
if (n == 0) {
return res;
}
Collections.sort(intervals, (i1, i2) -> Integer.compare(i1.start, i2.start));
int start = intervals.get(0).start;
int end = intervals.get(0).end;
for (int i = 1; i < n; i++) {
if (intervals.get(i).start <= end) {
end = Math.max(end, intervals.get(i).end);
} else {
res.add(new Interval(start, end));
start = intervals.get(i).start;
end = intervals.get(i).end;
}
}
res.add(new Interval(start, end));
return res;
}
}