合并区间
同步历史订单,将大区间段任务进行拆分成小任务进行同步(定长,fork/join拆分)。 使用异步线程合并已同步完成区间,进行进度记录。
题目描述
给出一组区间,请合并所有重叠的区间。相关例题:《合并区间》
给出[10,30],[20,60],[80,100],[150,180],
返回[10,60],[80,100],[150,180]
解题思路
- 根据区间中的start进行排序
- 区分以下情况合并
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
if (intervals.isEmpty() || intervals.size() == 1) {
return intervals;
}
intervals.sort(Comparator.comparingInt(o -> o.start));
ArrayList<Interval> arrayList = new ArrayList<>();
Interval interval = intervals.get(0);
for (int i = 1; i < intervals.size(); i++) {
Interval inter = intervals.get(i);
if (interval.end < inter.start) {
arrayList.add(interval);
interval = inter;
continue;
}
interval = new Interval(interval.start, interval.end >= inter.end ? interval.end : inter.end);
}
arrayList.add(interval);
return arrayList;
}