//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].
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class test{
public static List<Interval> merge(List<Interval> intervals) {
if(intervals.size()<=1) return intervals;
Collections.sort(intervals,new IntervalComparator()); //使用自定义的排序类将数组进行排序
List<Interval> result=new ArrayList<Interval>();
Interval temp1=intervals.get(0);
for(int i=1;i<intervals.size();i++){
Interval temp2 = intervals.get(i);
if(temp1.end>=temp2.start){ //若temp1的end大于temp2的start则他们有重合部分
Interval temp3=new Interval(temp1.start,Math.max(temp1.end,temp2.end)); //因为已经排好序了,所以temp1的start肯定比temp2的start小,只需取temp1和temp2之中大的end作为新类型的end即可
temp1=temp3;
}else{
result.add(temp1); //若没有重合部分,则将temp1加入result集合
temp1=temp2;
}
}
result.add(temp1); //最后再做一次add
return result;
}
static class IntervalComparator implements Comparator<Interval>{ //自定义的排序类
public int compare(Interval i1,Interval i2){
return i1.start - i2.start;
}
}
public static void main(String[] args){
Interval i1 = new Interval(1,2);
Interval i2 = new Interval(3,4);
Interval i3 = new Interval(5,6);
// Interval i4 = new Interval(15,18);
List<Interval> input = new ArrayList<Interval>();
input.add(i1);
input.add(i2);
input.add(i3);
// input.add(i4);
List<Interval> result = merge(input);
System.out.println(result);
}
}
leetcode 56. Merge Intervals
最新推荐文章于 2024-04-25 17:27:12 发布