您的位置:首页 > 职场人生

lintCode-给出若干闭合区间,合并所有重叠的部分。

2015-08-29 19:30 453 查看
给出若干闭合区间,合并所有重叠的部分。

您在真实的面试中是否遇到过这个题? Yes

样例

给出的区间列表 => 合并后的区间列表:

[ [

[1, 3], [1, 6],

[2, 6], => [8, 10],

[8, 10], [15, 18]

[15, 18] ]

]

挑战

O(n log n) 的时间和 O(1) 的额外空间。

标签 Expand

相关题目 Expand

/*
* Question:给出若干闭合区间,合并所有重叠的部分。
*
* Solution:首先需要依赖链表每个节点的start进行排序,避免出现[2,3][3,6][5,9][1,10]这样的情况出现
* 排序之后只需扫描一遍数据,让每个数据与上一个进行比较
* 排序的复杂度为nlogn,比较的复杂度为n
*/
public static List<Interval> merge(List<Interval> intervals) {
if(intervals.size() < 2) {
return intervals;
}
List<Interval> result = new ArrayList<Interval>();
Interval l1,l2;
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
return o1.start - o2.start;
}
});

l1 = intervals.get(0);
for(int i = 0 ; i < intervals.size() ; i++) {
if(i+1 == intervals.size()) {
result.add(l1);
break;
} else {
l2 = intervals.get(i+1);
}

if(l1.end >= l2.start) {
l1.end = Math.max(l1.end, l2.end);
} else {
result.add(l1);
l1 = l2;
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  合并 面试