Merge Intervals
程序员文章站
2022-04-17 09:01:27
...
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].
题目中给定了一个interval集合,要求我们将集合中的interval合并,合并之后的interval是按照升序排列的。我们可以先将interval排序先按照interval的第一个元素,如果第一个元素相等就按照第二个元素。排序的时候我们定义一个比较器comparator。排序之后,从第二个interval开始,如果第二个interval的第一个元素等于或小于第一个interval的第二个元素,那么就将intervals[1].end = Math.max(intervals[2].end, intervals[1].end)。如果没有重叠,直接打入到结果集中。时间复杂度为O(nlogn)。代码如下:
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
题目中给定了一个interval集合,要求我们将集合中的interval合并,合并之后的interval是按照升序排列的。我们可以先将interval排序先按照interval的第一个元素,如果第一个元素相等就按照第二个元素。排序的时候我们定义一个比较器comparator。排序之后,从第二个interval开始,如果第二个interval的第一个元素等于或小于第一个interval的第二个元素,那么就将intervals[1].end = Math.max(intervals[2].end, intervals[1].end)。如果没有重叠,直接打入到结果集中。时间复杂度为O(nlogn)。代码如下:
/** * 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 { public List<Interval> merge(List<Interval> intervals) { List<Interval> list = new ArrayList<Interval>(); if(intervals == null || intervals.size() == 0) return list; Collections.sort(intervals, new Comparator<Interval>() { @Override public int compare(Interval i1, Interval i2) { if(i1.start == i2.start) return i1.end - i2.end; return i1.start - i2.start; } }); list.add(intervals.get(0)); for(int i = 0; i < intervals.size(); i++) { if(list.get(list.size() - 1).end >= intervals.get(i).start) { list.get(list.size() - 1).end = Math.max(list.get(list.size() - 1).end, intervals.get(i).end); } else { list.add(intervals.get(i)); } } return list; } }
推荐阅读
-
Pandas 合并多个Dataframe(merge,concat)的方法
-
C#实现的Table的Merge,以及实现Table的Copy和Clone
-
PHP使用array_merge重新排列数组下标的方法
-
理解merge和pushStack可以更好的了解jQuery源码
-
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
-
解析php中array_merge与array+array的区别
-
php通过array_merge()函数合并两个数组的方法
-
php通过array_merge()函数合并关联和非关联数组的方法
-
苹果也能玩谷歌头显 Merge VR研发的通用控制器
-
SQLServer 2008中SQL增强之三 Merge(在一条语句中使用Insert,Update,Delete)