码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-56. Merge Intervals

时间:2018-03-06 16:58:04      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:size   art   struct   解决   class   第一步   use   ons   star   

一、问题描述

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

例子:

给定[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

标签:size   art   struct   解决   class   第一步   use   ons   star   

原文地址:https://www.cnblogs.com/likaiming/p/8514724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!