解题思路:
刚开始我准备先将所有的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;
}
}
运行结果:
先排序再合并:
设置双数组: