您的位置:首页 > 其它

合并区间

2015-11-26 02:06 405 查看
给出若干闭合区间,合并所有重叠的部分。

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

[                     [
[1, 3],               [1, 6],
[2, 6],      =>       [8, 10],
[8, 10],              [15, 18]
[15, 18]            ]
]


挑战

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

解题思路:这道题在最开始看的时候误以为是已经排好序的,结果直接就分情况讨论了,当然程序是妥妥没有过。所以这样的题目印象中还是比较常见的,首先按照左端点进行排序,排好序以后判断右端点与下一个区间的左端点的关系来决定是否合并。

当然,我在这个过程中发现了java更加神奇的地方:1、java的Collections.sort函数及其相关函数调用;2、java中for的新用法。关于这两点其他随笔中也有总结

/**
* Definition of Interval:
* public class Interval {
*     int start, end;
*     Interval(int start, int end) {
*         this.start = start;
*         this.end = end;
*     }
*/

class Solution {
/**
* @param intervals: Sorted interval list.
* @return: A new sorted interval list.
*/
public List<Interval> merge(List<Interval> intervals) {
// write your code here
List<Interval> result = new LinkedList<>();
if(intervals == null || intervals.size()<1){
return result;
}
Collections.sort(intervals,new Comparator<Interval>(){
@Override
public int compare(Interval o1,Interval o2){
return   o1.start - o2.start;
}
});

Interval prev = null;
for (Interval item : intervals) {

if (prev == null || prev.end < item.start) {
result.add(item);
prev = item;
} else if (prev.end < item.end) {
prev.end = item.end;
}
}

return result;
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: