题解 | #合并区间#超简单Java版解释!
合并区间
https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a
思路:
- 主要是对各种情况的分类讨论,考察分析能力;
- 首先对区间按照起点进行升序排序,这样就可以按顺序取出原始序列,只需修改结果序列中末尾的区间;
-
将第一个区间加入结果序列,然后遍历原始序列;
- 取原始序列区间orign,结果序列末尾区间last,由于原始序列已按start升序排列,因此只需对比last.end;
- 若last.end<orign.start,则直接添加orign;
-
否则就可能需要对结果序列最后一位进行调整;
- 新的结果序列最后一位为origin.end和last.end中的较大值
-
public ArrayList<Interval> merge(ArrayList<Interval> intervals) { ArrayList<Interval> res=new ArrayList<>(); if(intervals.size()==0) return res; Collections.sort(intervals,new Comparator<Interval>(){ public int compare(Interval o1,Interval o2){ if(o1.start!=o2.start) return o1.start-o2.start; return o1.end-o2.end; } });//按照升序排序 Interval temp=intervals.get(0);//将第一个放入结果 res.add(temp); int count=0; for(int k=1;k<intervals.size();k++){ Interval last=res.get(count);//获取结果list中最后一个 Interval orign=intervals.get(k);//获取原始的区间 if(last.end>=orign.start){ res.remove(count--); orign=new Interval(last.start,last.end<orign.end?orign.end:last.end); } res.add(orign); count++; } return res; }