标签:
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]
.
思路一:逐一添加元素至ans里面,判断这个区间是否与已添加元素有交集。有交集则合并区间。结果j超时。
/** * 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) { int m=intervals.size(); if(m==0||m==1) return intervals; List<Interval> inter=new ArrayList<Interval>(); inter.add(intervals.get(0)); for(int i=0;i<m;i++){ merge2(inter,intervals.get(i)); } return inter; } public void merge2(List<Interval> i,Interval inte){ int m=i.size(); if(m==0){ i.add(inte); } Interval temp=new Interval(); for(int j=0;j<m;j++){ temp=i.get(j); if(temp.start<=inte.start&&inte.start<=temp.end){ if(temp.end<=inte.end){ temp.end=inte.end; } }else if(temp.start<=inte.end&&inte.end<=temp.end){ if(temp.start>=inte.start){ temp.start=inte.start; } }else{ i.add(inte); } } } }
思路二:优化,先将区间排序,每次插入时只需要比较新插入的值和result最后一个区间是否有重复。
public class Solution { public List<Interval> merge(List<Interval> intervals) { int m=intervals.size(); if(m==0||m==1) return intervals; else { List<Interval> res = new ArrayList<Interval>(); Comparator<Interval> comp = new Comparator<Interval>(){ public int compare (Interval i1, Interval i2){ if(i1.start == i2.start){ return i1.end - i2.end; } return i1.start - i2.start; } }; Collections.sort(intervals, comp); List<Interval> inter=new ArrayList<Interval>(); inter.add(intervals.get(0)); for(int i=0;i<m;i++){ merge2(inter,intervals.get(i)); } return inter; } } public void merge2(List<Interval> i,Interval inte){ int m=i.size(); if(m==0){ i.add(inte); } Interval temp=new Interval(); temp=i.get(m-1); /* if(temp.start>=inte.start&&temp.end<=inte.end){ /* temp.start=inte.start; temp.end=inte.end; i.remove(j); m--; j--; }*/ if(temp.start<=inte.start&&inte.start<=temp.end){ if(temp.end<=inte.end){ temp.end=inte.end; } }else if(temp.start<=inte.end&&inte.end<=temp.end){ if(temp.start>=inte.start){ temp.start=inte.start; } }else{ i.add(inte); } } }
标签:
原文地址:http://www.cnblogs.com/gonewithgt/p/4571627.html