zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    记一次线上网络问题排查
    记服务器上session设置引起的OutofMemory
    由DateFormat引起的线程安全问题
    十二周总结
    团队开发冲刺第十天
    团队开发冲刺第九天
    团队开发冲刺第八天
    团队开发冲刺第七天
    十二周总结
    团队开发冲刺第六天
  • 原文地址:https://www.cnblogs.com/likaiming/p/8514724.html
Copyright © 2011-2022 走看看