C++ 合并区间

    //给出一组区间,请合并所有重叠的区间。
    //请保证合并后的区间按区间起点升序排列。

    //区间结构体
        struct Interval 
    {
        int start;
        int end;
        Interval() : start(0), end(0) {}
        Interval(int s, int e) : start(s), end(e) {}
    };

    //比较结构:比较区间start的大小
    struct cmp
    {
        inline constexpr bool operator()(Interval& lhs, Interval& rhs)
        {
            return lhs.start < rhs.start;
        }
    };
    vector<Interval> merge(vector<Interval> &intervals) 
    {
        int length = intervals.size();
        vector<Interval> result;
        if (length < 1) return result;
        //首先对根据interval的start进行开始由小到大的排序。
        std::sort(intervals.begin(), intervals.end(), cmp());
        //设置当前区间
        Interval temp = intervals[0];
        for (int i = 1; i < length; ++i)
        {
            //当当前区间的temp.end小于intervals[i].start时,
            //说明区间之间出现了空隔,则证明当前区间该结束了。
            if (temp.end < intervals[i].start)
            {
                result.push_back(temp);
                temp = intervals[i];
            }
            //当temp.end不小于intervals[i].start,但小于intervals[i].end时,
            //则将当前区间的尾部延伸至intervals[i].end;
            else if (temp.end < intervals[i].end)
            {
                temp.end = intervals[i].end;
            }
        }
        result.push_back(temp);
        return result;
    }        

 

posted @ 2021-08-20 10:45  mshentai  阅读(815)  评论(0编辑  收藏  举报