题目链接:https://leetcode.com/problems/merge-intervals/
Total Accepted: 60386
Total Submissions: 244495
Difficulty: Hard
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
Subscribe to see which companies asked this question
Show Similar Problems
Have you met this question in a real interview?
Yes
No
给出一个区间数组,要求将重叠的区间合并。是个hard级别的题目,但个人觉得很easy。
显然greedy求解。将所有的区间按start排序,start相同则以end排序。然后从左向右逐个合并。注意一个边界条件,即,左边的大区间包含了右边的小区间。
我的AC代码
public class MergeIntervals {
public List<Interval> merge(List<Interval> intervals) {
if (intervals == null || intervals.size() <= 1) {
return intervals;
}
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
int r = o1.start - o2.start;
if (r != 0)
return r;
return o1.end - o2.end;
}
});
List<Interval> r = new ArrayList<Interval>();
Interval in = intervals.get(0);
for (int i = 1; i < intervals.size(); i++) {
Interval cur = intervals.get(i);
if (cur.start <= in.end && in.end <= cur.end) {
in.end = cur.end;
} else if(cur.start > in.end){
r.add(in);
in = cur;
} else if(cur.start <= in.end && in.end >= cur.end){
continue;
}
}
r.add(in);
return r;
}
}