解题思路:
刚开始我准备先将所有的interval按照start的大小先排序,然后再排序。但是太耗时了。第二种做法参考了题目后面的description
提交代码:
class Solution {
public List<Interval> merge(List<Interval> intervals) {
List<Interval> res = new ArrayList<Interval>();
if (intervals.size() == 0)
return res;
int[] starts = new int[intervals.size()];
int[] ends = new int[intervals.size()];
for (int i = 0; i < intervals.size(); i++) {
starts[i] = intervals.get(i).start;
ends[i] = intervals.get(i).end;
}
Arrays.sort(starts);
Arrays.sort(ends);
for (int i = 0, j = 0; i < intervals.size(); i++) {
if (i == intervals.size() - 1 || starts[i + 1] > ends[i]) {
res.add(new Interval(starts[j], ends[i]));
j = i + 1;
}
}
return res;
}
}
运行结果:
先排序再合并:

设置双数组:

本文深入探讨了一种有效的区间合并算法,旨在解决多个重叠区间的合并问题。通过将所有区间按起始点排序,然后遍历并合并重叠区间,最终得到一个不重叠的区间列表。文章详细介绍了算法实现过程,并提供了具体代码示例。

被折叠的 条评论
为什么被折叠?



