• 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].

    思路:首先以start排序,至于使用algorithm中的sort,需要自定义比较函数。可以参考:http://bbs.csdn.net/topics/340143411和http://bbs.csdn.net/topics/80039846,不过我在其中比较的时候加入了等号之后出现错误:

    I use the sort function to sort the starting points of all intervals,

    sort(intervals.begin(),intervals.end(),compareInterval); 

    However, when I am trying to use

    bool compareInterval(Interval a, Interval b)
    {
        return (a.start<=b.start);
    }

    the compiler outputs some Runtime error, however, the compiler accepts the code if I use

    bool compareInterval(Interval a, Interval b)
    {
        return (a.start<b.start);
    }

    可以看看:https://oj.leetcode.com/discuss/10936/sort-function-problems

    C++代码实现:

    #include<iostream>
    #include<vector>
    #include<algorithm>
    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:
        vector<Interval> merge(vector<Interval> &intervals)
        {
            if(intervals.empty())
                return vector<Interval>();
            if(intervals.size()==1)
                return intervals;
            sort(intervals.begin(),intervals.end(),Solution::mycompare);
            Interval temp=intervals[0];
            vector<Interval> ret;
            int i;
            for(i=1;i<(int)intervals.size();i++)
            {
                if(temp.end<intervals[i].start)
                {
                    ret.push_back(temp);
                    temp=intervals[i];
                }
                else
    
                    temp.end=max(temp.end,intervals[i].end);
            }
            ret.push_back(temp);
            return ret;
        }
        //注意,为什么要使用static呢?因为sort不是成员函数,不能直接调用类中的成员函数需要类的对象或类来调用,也可以将比较函数定义在类的外面成为非成员函数
        //还有就是不能加入等号,因为sort是严格递增的
        static bool mycompare(const Interval &a,const Interval &b)
        {
            return a.start<b.start;
        }
    };
    
    int main()
    {
        Solution s;
        Interval a1(1,3);
        Interval a2(2,6);
        Interval a3(8,10);
        Interval a4(15,18);
        vector<Interval> intervals={a4,a3,a1,a2};
        vector<Interval> result=s.merge(intervals);
        for(auto a:result)
            cout<<"[ "<<a.start<<" , "<<a.end<<" ]"<<endl;
    }

    运行结果:

  • 相关阅读:
    【Linux高级驱动】如何分析并移植网卡驱动
    【Linux高级驱动】网卡驱动分析
    【Linux高级驱动】I2C驱动框架分析
    【Linux高级驱动】触摸屏工作原理与工作流程
    【Linux高级驱动】触摸屏驱动的移植
    【Linux高级驱动】input子系统框架
    【Linux高级驱动】平台设备驱动机制的编程流程与编译进内核
    【Linux高级驱动】rtc驱动开发
    【Linux高级驱动】linux设备驱动模型之平台设备驱动机制
    【Linux】Linux基本命令扫盲
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4119318.html
Copyright © 2020-2023  润新知