前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Leetcode】56. 合并区间

【Leetcode】56. 合并区间

作者头像
Leetcode名企之路
发布2018-09-12 15:21:44
6620
发布2018-09-12 15:21:44
举报
文章被收录于专栏:Leetcode名企之路

题目

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

示例 1:

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

示例 2:

代码语言:javascript
复制
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

题解

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

代码语言:javascript
复制
/**
 * 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.)行为

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Leetcode名企之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 题解
  • 每日英文
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档