【Leetcode】56. 合并区间

作者: 码蹄疾 | 来源:发表于2018-08-30 09:25 被阅读2次

    作者: 码蹄疾
    毕业于哈尔滨工业大学。 小米广告第三代广告引擎的设计者、开发者;
    负责小米应用商店、日历、开屏广告业务线研发;
    主导小米广告引擎多个模块重构;
    关注推荐、搜索、广告领域相关知识;

    题目

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

    示例 1:

    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
    

    示例 2:

    输入: [[1,4],[4,5]]
    输出: [[1,5]]
    解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
    

    题解

    这个题的基本思路就是当两个区间有重合的时候,第一个区间的end >= 第二个区间的start。前提是我们都是从小到大排好序的。那么合并完的区间就是[第一个区间的start, 第二个区间的end]。遍历结束,即可得到最终的解。

    /**
     * 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; }
     * }
     */
    class Solution {
        public List<Interval> merge(List<Interval> intervals) {
            // sort start&end
            int n = intervals.size();
            int[] starts = new int[n];
            int[] ends = new int[n];
            for (int i = 0; i < n; i++) {
                starts[i] = intervals.get(i).start;
                ends[i] = intervals.get(i).end;
            }
            Arrays.sort(starts);
            Arrays.sort(ends);
            // loop through
            int i = 0;
            List<Interval> res = new ArrayList<>();
            while (i < n) {
                int st = starts[i];
                while (i < n - 1 && starts[i + 1] <= ends[i]) i++;
                int en = ends[i];
                res.add(new Interval(st, en));
                i++;
            }
            return res;
        }
    }
    

    每日英文

    • government (n.)政府
    • self-governing (n.)自我管理
    • governance (n.) 统治权,管理
    • government-funded (adj.) 政府拨款的
    • be governed by 受约束,被控制
    • administrate (v.) 行政管理
      • PM (prime minister)首相
    • conduct (v.) 引领、引导 (n.)行为

    热门阅读

    相关文章

      网友评论

        本文标题:【Leetcode】56. 合并区间

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