每天一题LeetCode【第40天】

2017-04-07  本文已影响190人  草稿纸反面

T56. Merge Intervals【Medium

题目

给一个区间集,合并有重叠的区间。

例如:

给出区间 [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

思路

哈其实,一开始我有我看到合并区间懵了一下(英文还是不行啊!)

所以上图解释一下哈哈:

然后再讲思路:

① 若区间为0~1个,直接返回

② 给区间按 start 元素排序

③ 若重合( next.start<this.end )取两个 end 元素得较大值

④ 若不重合,则这个区间不能再合并了,添加到 result 里面

代码

代码取自 Top Solution,稍作注释

static List<Interval> merge(List<Interval> intervals) {
        //若区间为0~1个,直接返回
        if (intervals.size() <= 1)
            return intervals;
        //按 start 元素排序
        intervals.sort((i1, i2) -> Integer.compare(i1.start, i2.start));
        
        List<Interval> result = new LinkedList<Interval>();
        //  给初始 start end 赋值
        int start = intervals.get(0).start;
        int end = intervals.get(0).end;
        for (Interval interval : intervals) {
            if (interval.start <= end) 
                // 重叠时,对end进行处理
                end = Math.max(end, interval.end);
            else {                     
                // 添加上一个分好的区间,并重置边界
                result.add(new Interval(start, end));
                start = interval.start;
                end = interval.end;
            }
        }

        // 添加最后一个 Interval
        result.add(new Interval(start, end));
        return result;
    }

补充

看到这个东西一脸懵逼(内心:java怎么会有箭头啊!):

intervals.sort((i1, i2) -> Integer.compare(i1.start, i2.start));

好吧,我还是太年轻,这是 Java SE 8 的 Lambda 表达式

给几个博客链接:

Java Lambda表达式入门

深入浅出 Java 8 Lambda 表达式

但是最重要的还是自己写代码试试~咳,不说了,写代码去。

上一篇下一篇

猜你喜欢

热点阅读