排序法区间合并

合并区间

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

public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
        // 根据左边界升序排列,左边界相等时根据右边界升序排列
        Collections.sort(intervals, (a, b) -> {
            if (a.start == b.start) return a.end - b.end;
            else return a.start - b.start;
        });
        int size = intervals.size();
        ArrayList<Interval> res = new ArrayList<>();
        for (int i = 1; i <= size; i++) {
            int start = intervals.get(i-1).start;
            int maxEnd = intervals.get(i-1).end;
            // 当合并区间左边界>=i的左边界时,更新合并区间的左边界,否则退出循环
            while (i<size && maxEnd >= intervals.get(i).start) {
                maxEnd = Math.max(maxEnd, intervals.get(i).end);
                i++;
            }
            // 登记区间
            res.add(new Interval(start, maxEnd));
        }
        return res;
    }
全部评论

相关推荐

10-15 10:23
门头沟学院 Java
牛可乐的头像真牛:赶紧举报,这公司绝对是诈骗的,等你签约后工作一两个月后根据合同漏洞把你开除,并且要求你赔偿3w培训费,996是为了提前筛选心甘情愿签下合同容易受骗的群体,纯粹面向校招生精心设计的骗局
你见过哪些工贼行为
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务