56. Merge Intervals(合并重复区间)
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]
.
题目大意:
给定·一系列区间,合并有重叠部分的区间
思路:
先对给定区间进行排序,collections.sort()
1.若区间a的末尾数字大于排序后一个区间b的首位数字,则可以进行合并,合并后的区间末尾数为区间a,b之间的最大值
2.反之若相邻区间无重叠区间,则之间添加,同时更新区间再进行比较。
AC代码:
public List<Interval> merge(List<Interval> intervals) {
List<Interval> res=new ArrayList<>();
if(intervals.size()==0)
return res;
Collections.sort(intervals,new Comparator<Interval>(){
public int compare(Interval a,Interval b){
return a.start-b.start;
}
});;
Interval temp=intervals.get(0);
if(intervals.size()==1){
res.add(temp);
return res;
}
for(int i=1;i<intervals.size();i++){
if(temp.end>=intervals.get(i).start){
temp.end=Math.max(temp.end,intervals.get(i).end);
}
else{
res.add(temp);
temp=intervals.get(i);
}
}
res.add(temp);
return res;
}