LeetCode-56. Merge Intervals

Posted 番茄汁汁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-56. Merge Intervals相关的知识,希望对你有一定的参考价值。

一、问题描述

给定一系列区间,要求将其中重叠的、临接的区间合并成一个区间

例子:

给定[1,3],[2,6],[8,10],[15,18]

输出[1,6],[8,10],[15,18]

二、问题解决

第一步:先对区间按区间头进行排序

第二步:从第一个区间开始遍历,如果后一个区间与前一个区间有重叠或是紧挨着,则合并,并且继续往后读。如果没有,则将该区间加入result中,并且以下一个区间为起始区间重复这一步。

//表示区间的结构
struct Interval {
    int start;
    int end;
    Interval() : start(0), end(0) {}
    Interval(int s, int e) : start(s), end(e) {}
};
//排序函数
void mysort(vector<Interval>& intervals) {
    for (int i = 0; i < intervals.size(); i++) {
        int pos = i;
        while (pos < intervals.size()) {
            if (intervals[pos].start < intervals[i].start)
                swap(intervals[pos], intervals[i]);
            pos++;
        }
    }
}
vector<Interval> merge(vector<Interval>& intervals) {
    vector<Interval> result;
    if (intervals.size() == 0) return result;
    mysort(intervals);
    int pos = 0;
    while (pos < intervals.size()) {
        Interval temp(intervals[pos].start,intervals[pos].end);
        while (++pos < intervals.size() && intervals[pos].start <= temp.end)
            temp.end = max(intervals[pos].end,temp.end);
        result.emplace_back(temp);
    }
    return result;
}

//这是测试用例
int main()
{
    vector<Interval> v = {Interval(1,4),Interval(0,4)};
    auto result = merge(v);
    for (auto i : result) {
        cout << i.start;
        cout << i.end;
        cout << endl;
    }

    system("pause");
    return 0;
}

 

以上是关于LeetCode-56. Merge Intervals的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode56 Merge Intervals

LeetCode 56. 56. Merge Intervals 20170508

Leetcode 56: Merge Intervals

[LeetCode] 56. Merge Interval

[LeetCode] 56. Merge Interval

leetcode56 Merge Intervals