题解 | #合并区间#超简单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;
            }

#实习下班后你在做什么#
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 19:05
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务