NC37:合并区间
合并区间
http://www.nowcoder.com/questionTerminal/69f4e5b7ad284a478777cb2a17fb5e6a
思路:
首先进行排序:按照start从小到大排序,如果start相等按照end进行排序;
把第一个数据加入list,记录第i个数据、list中的最后一个数据
进行判断
/** * 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; } * } */ import java.util.*; public class Solution { public ArrayList<Interval> merge(ArrayList<Interval> intervals) { if(intervals.size() < 2) return intervals; Collections.sort(intervals, new Comparator<Interval>() { //按照start、end从小到大进行排序; public int compare(Interval o1, Interval o2) { if(o1.start == o2.start){ return o1.end < o2.end ? - 1 : 1; } return o1.start < o2.start ? - 1 : 1; } }); ArrayList<Interval> list = new ArrayList<>(); //将第一个对象加入 list.add(intervals.get(0)); for (int i = 1; i < intervals.size(); i ++) { Interval cur = intervals.get(i); Interval ready = list.get(list.size() - 1); if(cur.start <= ready.end) {//区间相交 ready.end = cur.end > ready.end ? cur.end : ready.end; //合并两个区间成为新的区间,剔除原来的区间,将新区间加入到结果集中 list.remove(list.size() - 1); list.add(ready); } else{//区间不相交,直接加入 list.add(cur); } } return list; } }
```
名企高频面试算法题解 文章被收录于专栏
牛客题霸 - 程序员面试高频题 - 题解