【LeetCode】merge intervals
2017-06-26 11:16
375 查看
题目:
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].
个人解析与理解:1.给定的collection
没有说明有序,所以要对它先进性排序(根据start的值)。用JAVA的 comparator
时间复杂度为nlogn,
空间复杂度为O(1)。
2.
剩下的很简单,只要明白什么条件下合并即刻。因为我们对interval
已经进行了排序,现在唯一不确定的就是上一个interval的end是否大于下一个interval的start。如果前一个end
> 下一个的start,
那么进行合并。
3.
最后当遍历完最后一个interval时,
如果他跟目前面重叠,就会把他合并但没有加入;如果他们有跟前面重叠,就会加入前面整理好的intverval
不加入它自身,所以我们要最后再加一下。
具体Java 代码如下:
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
private class MyComp implements Comparator<Interval>{
public int compare(Interval a, Interval b){
return a.start - b.start;
}
}
public List<Interval> merge(List<Interval> intervals) {
if (intervals.size() <=1)
return intervals;
List<Interval> rst = new ArrayList<Interval>();
Collections.sort(intervals, new MyComp());
int start = intervals.get(0).start;
int end = intervals.get(0).end;
for(int i = 1; i < intervals.size(); i++){
Interval tmp = intervals.get(i);
if(tmp.start <= end)//case of overlapping interval, get the biggest end value
end = Math.max(end, tmp.end);
else{//the tmp interval does not overlap with previous interval
rst.add(new Interval(start, end));
start = tmp.start;//the new start and end is updated
end = tmp.end;
}
}
rst.add(new Interval(start, end));//add the last interval
return rst;
}
}
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].
个人解析与理解:1.给定的collection
没有说明有序,所以要对它先进性排序(根据start的值)。用JAVA的 comparator
时间复杂度为nlogn,
空间复杂度为O(1)。
2.
剩下的很简单,只要明白什么条件下合并即刻。因为我们对interval
已经进行了排序,现在唯一不确定的就是上一个interval的end是否大于下一个interval的start。如果前一个end
> 下一个的start,
那么进行合并。
3.
最后当遍历完最后一个interval时,
如果他跟目前面重叠,就会把他合并但没有加入;如果他们有跟前面重叠,就会加入前面整理好的intverval
不加入它自身,所以我们要最后再加一下。
具体Java 代码如下:
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
private class MyComp implements Comparator<Interval>{
public int compare(Interval a, Interval b){
return a.start - b.start;
}
}
public List<Interval> merge(List<Interval> intervals) {
if (intervals.size() <=1)
return intervals;
List<Interval> rst = new ArrayList<Interval>();
Collections.sort(intervals, new MyComp());
int start = intervals.get(0).start;
int end = intervals.get(0).end;
for(int i = 1; i < intervals.size(); i++){
Interval tmp = intervals.get(i);
if(tmp.start <= end)//case of overlapping interval, get the biggest end value
end = Math.max(end, tmp.end);
else{//the tmp interval does not overlap with previous interval
rst.add(new Interval(start, end));
start = tmp.start;//the new start and end is updated
end = tmp.end;
}
}
rst.add(new Interval(start, end));//add the last interval
return rst;
}
}
相关文章推荐
- [LeetCode] Merge Intervals
- LeetCode | Merge Intervals(合并区间间隔)
- [LeetCode] Merge Intervals 合并区间
- LeetCode 056 Merge Intervals
- Merge Intervals 合并区间@LeetCode
- [leetcode]Merge Intervals
- [LeetCode] Merge Intervals
- LEETCODE: Merge Intervals
- 【LeetCode】Merge Intervals 题解 利用Comparator进行排序
- leetcode--Merge Intervals
- leetcode 28: Merge Intervals
- LeetCode第56题之Merge Intervals
- [LeetCode51]Merge Intervals
- Leetcode-Merge Intervals
- [LeetCode] Merge Intervals
- leetcode 056 —— Merge Intervals
- Leetcode 56 Merge Intervals
- LeetCode(56)Merge Intervals
- LeetCode 56 - Merge Intervals
- Leetcode之Merge Intervals 问题