NC37:合并区间

合并区间

http://www.nowcoder.com/questionTerminal/69f4e5b7ad284a478777cb2a17fb5e6a

思路:

  1. 首先进行排序:按照start从小到大排序,如果start相等按照end进行排序;

  2. 把第一个数据加入list,记录第i个数据、list中的最后一个数据

  3. 进行判断

    /**
    * 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;
     }
    }
    

```

名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论
思路清晰,代码优雅,赞!ready.end = cur.end > ready.end ? cur.end : ready.end; 可以更优化一下,直接 ready.end = Math.max(ready.end, cur.end); 可能可读性更好一些,但也无关紧要了。
点赞 回复 分享
发布于 2021-01-30 18:19
直接更新ready的end值就行了 没必要再从链表里把最后一个元素剔除再加进去了 ,所以那两行代码可去除
点赞 回复 分享
发布于 2021-05-06 15:09

相关推荐

10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务