`

Merge Intervals

阅读更多
Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

题目中给定了一个interval集合,要求我们将集合中的interval合并,合并之后的interval是按照升序排列的。我们可以先将interval排序先按照interval的第一个元素,如果第一个元素相等就按照第二个元素。排序的时候我们定义一个比较器comparator。排序之后,从第二个interval开始,如果第二个interval的第一个元素等于或小于第一个interval的第二个元素,那么就将intervals[1].end = Math.max(intervals[2].end, intervals[1].end)。如果没有重叠,直接打入到结果集中。时间复杂度为O(nlogn)。代码如下:
/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
public class Solution {
    public List<Interval> merge(List<Interval> intervals) {
        List<Interval> list = new ArrayList<Interval>();
        if(intervals == null || intervals.size() == 0) return list;
        Collections.sort(intervals, new Comparator<Interval>() {
            @Override
            public int compare(Interval i1, Interval i2) {
                if(i1.start == i2.start) 
                    return i1.end - i2.end;
                return i1.start - i2.start;
            }
        });
        list.add(intervals.get(0));
        for(int i = 0; i < intervals.size(); i++) {
            if(list.get(list.size() - 1).end >= intervals.get(i).start) {
                list.get(list.size() - 1).end = Math.max(list.get(list.size() - 1).end, intervals.get(i).end);
            } else {
                list.add(intervals.get(i));
            }
        }
        return list;
    }
}
分享到:
评论

相关推荐

    java-leetcode题解之Merge Intervals.java

    java java_leetcode题解之Merge Intervals.java

    Coding Interview In Java

    11 Merge Intervals 43 12 Insert Interval 45 13 Two Sum 47 14 Two Sum II Input array is sorted 49 15 Two Sum III Data structure design 51 16 3Sum 53 17 4Sum 55 18 3Sum Closest 57 19 String to Integer ...

    js-leetcode题解之56-merge-intervals.js

    js js_leetcode题解之56-merge-intervals.js

    C语言-leetcode题解之56-merge-intervals.c

    c是最好的编程语言 C语言_leetcode题解之56-merge-intervals

    30个苹果编程面试题(含解答案).pdf

    func mergeIntervals(intervals []Interval) []Interval { if len(intervals) == 0 { return nil } // 先按区间的起始位置排序 sort.Slice(intervals, func(i, j int) bool { return intervals[i].Start &lt; ...

    c++-c++编程基础之leetcode题解第56题合并区间.zip

    第56题,"Merge Intervals"(合并区间),是一道典型的区间处理问题,它考察了对排序、遍历以及区间合并的理解。在此,我们将深入探讨这个问题的解决方案,并结合C++编程技巧进行解析。 首先,我们要明确问题描述:...

    LeetCode 刷题笔记 with Java.zip

    例如,“Merge Intervals”(合并区间)要求我们合并时间重叠的事件区间,这需要用到排序和区间合并的技巧。"Valid Palindrome"(有效的回文串)则需要理解双指针法和忽略特定字符的策略。 最后的暗黑版《LeetCode ...

    LeetCode题解(java语言实现).pdf

    * Merge Intervals:该题目要求合并重叠的区间,实现方法使用了排序和迭代算法。 * Insert Interval:该题目要求将一个区间插入到另一个区间中,实现方法使用了排序和迭代算法。 三、字符串和动态规划 * String to...

    LeetCode题解 - Java语言实现-181页.pdf

    9. Merge Intervals 区间合并是一个数组问题,要求合并重叠的区间。可以使用排序和迭代来解决该问题。 10. Insert Interval 区间插入是一个数组问题,要求将一个区间插入到已经排序的区间数组中。可以使用二分...

    Leetcode部分解答(126题)

    5. **Merge Intervals(using (Insert Interval) ).cpp** - 这是第56题“合并区间”的解冑,涉及到区间操作,尤其是如何有效地插入新区间并合并重叠区间。 6. **Integer to Roman.cpp** - 第40题,与“Roman to ...

    My leetcode.rar

    通常,LeetCode的问题解答会以问题的ID或题目名称来命名,例如 "001_two_sum.java" 或 "MergeIntervals.java"。这样的命名方式有助于用户快速识别代码对应的题目。 在解压并查看这些文件时,我们可以期待学习到以下...

    LeetCodeTrain:这是来自LeetCode的已解决任务的存储库

    这是来自LeetCode的已解决任务的存储库使用Java语言解决任务 CoinChange.java - //leetcode....intervals/ ReverseLinkedList.java - //leetcode.com/problem

    Facebook 最新面试题总结

    Merge Intervals(合并区间)**: - 合并一系列的区间,使得这些区间不重叠。 6. **LeetCode 388. Longest Absolute File Path(最长绝对文件路径)**: - 计算文件路径中最长的绝对路径长度。 7. **LeetCode ...

    leetcode2sumc-LeetCode:练习商务面试

    leetcode 2 sum c LeetCode规划 LEETCODE PATTERNS 从LeetCode学演算法 Leetcode笔记 ...intervals (第一类) ex: [1,2], [2,3], [4,5], [5,7] &gt; [1,2,3], [4,5,7] 3) merge intervals (第二类) - M

    _leetcode-python.pdf

    - Merge Intervals: 给定一组区间,请合并所有重叠的区间。 - Insert Interval: 在一组已经排序的区间中,插入一个新的区间。 - Rotate List: 给定一个链表的头节点head,当旋转了k个位置后,返回链表的新头节点。 -...

    coding-interview-in-java.pdf

    4. MergeIntervals - 合并重叠的区间,这是一个常见的面试题目,考察对区间处理和合并算法的理解。 5. InsertInterval - 在一组区间中插入一个新的区间,并确保结果区间仍然是排序和无重叠的。这需要理解区间的...

    LeetCode最全代码

    ...The number of questions is increasing recently. Here is the classification of all `468` questions. ...I'll keep updating for full summary and better solutions....|-----|---------------- | --------------- |...

    javalruleetcode-LeetCode::lollipop:个人LeetCode习题解答仓库-多语言

    java lru leetcode :ice_cream: LeetCode Kindem 的个人 LeetCode 题解仓库,欢迎交流学习。 下面的目录中 $number 题号代表经典 LeetCode 题目,$number.$number ...Merge Intervals 64 Minimum Path Sum 73

Global site tag (gtag.js) - Google Analytics