import java.util.*;
/*
* public class Interval {
* int start;
* int end;
* public Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param intervals Interval类ArrayList
* @return Interval类ArrayList
*/
public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
// write code here
//res用来保存最终需要返回的结果
ArrayList<Interval> res = new ArrayList<>();
if(intervals.size()==0) return res;//排除特殊情况
//对intervals中的区间进行升序排序,start相同的按end排
Collections.sort(intervals,new Comparator<Interval>()
{
public int compare(Interval n1,Interval n2)
{
if(n1.start!=n2.start)
return n1.start-n2.start;
else
return n1.end-n2.end;
}
});
res.add(intervals.get(0));//先加入第一个区间
int count=0;//永远指向res中最后一个元素
for(int i=1;i<intervals.size();i++)
{
Interval cur = intervals.get(i);
Interval pre = res.get(count);
if(cur.start>pre.end)//无需合并,将cur加入res
{
res.add(cur);
count++;
}
else//需要合并
{
res.remove(count);//先从res中移除最后一个区间
Interval tmp =new Interval(pre.start,Math.max(cur.end,pre.end));//合并得到的新区间
res.add(tmp);
//注意这里删一加一,count不需要++
}
}
return res;
}
}