Leetcode-056-合并区间

这个题以前做过类似的,是问给定一些区间,最多能选出多少互不相交的区间。思路是先对区间依照起始点或结束点进行排序,然后依次选取即可(与前一个选取的区间有overlap则不选取)。这题思路也是一样,先对区间依照起始点进行排序,然后依次合并就行了。

/**
 * Definition for an interval.
 * 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(Interval a,Interval b)
    {
        return a.start<b.start;
    }
    vector<Interval> merge(vector<Interval>& intervals) 
    {
        vector<Interval> ans;
        if(intervals.empty()) return ans;
        sort(intervals.begin(),intervals.end(),cmp);
        ans.push_back(intervals[0]);
        for(int i=1;i<intervals.size();i++)
        {
            #若下一个区间与上一个区间有overlap,则更新上一区间的结束点
            if(intervals[i].start<=ans.back().end)
                ans.back().end=max(ans.back().end,intervals[i].end);
            #否则直接讲区间加入ans中
            else
                ans.push_back(intervals[i]);
        }
        return ans;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容