美文网首页
每天一题LeetCode【第40天】

每天一题LeetCode【第40天】

作者: 草稿纸反面 | 来源:发表于2017-04-07 00:03 被阅读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 表达式

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

    相关文章

      网友评论

          本文标题:每天一题LeetCode【第40天】

          本文链接:https://www.haomeiwen.com/subject/ccycattx.html