Description
Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
分析
题目的意思是:合并有交集的区间。
- 这主要是在遍历之前需要做一下排序,排序的话,注意compare函数需要放在类的外面才行,下面没什么好说的,一次遍历,满足条件就行了。
- 开始我开在了由多个交叉区间怎么进行合并,原来重新newInterval来不断的循环判断就行了,没有交叉就把它存下来。
C++ 代码
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> result;
if(intervals.size()==0){
return result;
}
sort(intervals.begin(),intervals.end(),[](Interval &a,Interval &b){
return a.start<b.start;
});
Interval newInterval=intervals[0];
for(int i=1;i<intervals.size();i++){
if(newInterval.end>=intervals[i].start){
newInterval.start=min(newInterval.start,intervals[i].start);
newInterval.end=max(newInterval.end,intervals[i].end);
}else{
result.push_back(newInterval);
newInterval=intervals[i];
}
}
result.push_back(newInterval);
return result;
}
};
Python 代码
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
res=[]
intervals = sorted(intervals,key=lambda x:x[0])
for i in range(len(intervals)):
if i==0:
res.append(intervals[i])
else:
arr1=res[-1]
arr2=intervals[i]
if(arr2[0]<=arr1[1]):
res.pop()
left=min(arr1[0],arr2[0])
right=max(arr1[1],arr2[1])
res.append([left,right])
else:
res.append(arr2)
return res
另一个naive实现版本:
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
# low = min(l1[0],l2[0])
# high = max(l1[1], l2[1])
intervals = sorted(intervals, key=lambda x : x[0])
res = []
t = intervals[0]
for i in range(1,len(intervals)):
inter = intervals[i]
if inter[0]<=t[1]:
min_val = min(inter[0], t[0])
max_val = max(inter[1], t[1])
t = [min_val, max_val]
else:
res.append(t)
t = inter
res.append(t)
return res