最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • [LeetCode]56.Merge Intervals


    【题目】

    Given a collection of intervals, merge all overlapping intervals.

    For example,
    Given [1,3],[2,6],[8,10],[15,18],
    return [1,6],[8,10],[15,18].

    【分析】

    (1)先将目标区间数组按X轴从小到大排序。例如:[2,3] [1,2] [3,9] ->[1,2] [2,3] [3,9]

    (2)扫描排序后的目标区间数组,将这些区间合并成若干个互不相交的区间。例如 [2,3] [1,2] [4,9] ->[1,3]  [4,9]

    这里分3种情况:

    a:[1,3] [2,6]  -> [1,6]  第1个区间的end大于等于第2个区间的start,同时第2个区间的end大于第1个区间的end

    b:[1,7] [2,4] -> [1,7]  第1个区间的end大于等于第2个区间的start,同时第2个区间的end小于第1个区间的end

    c:[1,2] [3,4] -> [1,2] [3,4] 第1个区间的end小于第2个区间的start

    【代码】

    /*********************************
    * 日期:2015-01⑴4
    * 作者:SJF0115
    * 题目: 56.Merge Intervals
    * 网址:https://oj.leetcode.com/problems/merge-intervals/
    * 结果:AC
    * 来源:LeetCode
    * 博客:
    **********************************/
    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;

    struct Interval {
    int start;
    int end;
    Interval() : start(0), end(0) {}
    Interval(int s, int e) : start(s), end(e) {}
    };

    class Solution {
    public:
    // 比较函数
    static bool cmp(const Interval& ina,const Interval& inb){
    return ina.start < inb.start;
    }
    vector<Interval> merge(vector<Interval> &intervals) {
    vector<Interval> result;
    int count = intervals.size();
    if(count <= 1){
    return intervals;
    }//if
    // x轴排序
    sort(intervals.begin(),intervals.end(),cmp);
    // 合并
    result.push_back(intervals[0]);
    // 斟酌3种情况
    for(int i = 1;i < count;i++){
    Interval preIn = result.back();
    Interval curIn = intervals[i];
    // [1,3] [2,6]
    if(curIn.start <= preIn.end && curIn.end > preIn.end){
    preIn.end = curIn.end;
    result.pop_back();
    result.push_back(preIn);
    }//if
    // [1,2] [3,4]
    else if(curIn.start > preIn.end){
    result.push_back(curIn);
    }
    // [1,7] [2,3] 不用做任何事
    }//for
    return result;
    }
    };

    int main(){
    Solution solution;
    Interval in1(1,2);
    Interval in2(4,6);
    Interval in3(8,10);
    Interval in4(15,18);

    vector<Interval> vec;
    vec.push_back(in1);
    vec.push_back(in2);
    vec.push_back(in3);
    vec.push_back(in4);
    // 合并
    vector<Interval> v = solution.merge(vec);
    // 输出
    for(int i = 0;i < v.size();i++){
    Interval in = v[i];
    cout<<"["<<in.start<<","<<in.end<<"]"<<endl;
    }//for
    return 0;
    }

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » [LeetCode]56.Merge Intervals

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级