56. Merge Interval

本文介绍了一种有效的区间合并算法,该算法通过先对输入的区间列表进行排序,然后逐一比较并合并重叠区间来实现。文章提供了完整的Java实现代码,并详细解释了每一步的处理逻辑。

解题思路

首先对当前的intervals进行排序,用Collections.sort(intervals, (o1,o2)->Integer.compare())

记录上一个的头尾

和上一个进行比较 

class Solution {
    public List<Interval> merge(List<Interval> intervals) {
        
        if(intervals.size() <= 1){
            return intervals;
        }
        
        Collections.sort(intervals, (o1,o2)->Integer.compare(o1.start,o2.start));
        int lastStart = intervals.get(0).start;
        int lastEnd = intervals.get(0).end;
        
        List<Interval> res = new LinkedList<>();
        
        for(Interval current : intervals){
            if(current.start > lastEnd){
                res.add(new Interval(lastStart,lastEnd));
                lastEnd = current.end;
                lastStart = current.start;
            } else {
                lastEnd = Math.max(current.end, lastEnd);
                
            }
        }
        res.add(new Interval(lastStart,lastEnd));
        return res;
    }
}

 

转载于:https://my.oschina.net/u/3457852/blog/1536209

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值