【Sort】56. Merge Intervals

来源:互联网 发布:数码宝贝网络侦探能力 编辑:程序博客网 时间:2024/06/05 08:31

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

/** * 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:    vector<Interval> merge(vector<Interval>& intervals) {            }};

思路:按照第一个数排序,然后逐一比较尾和头,如果下一个的头大,那么不重叠,否则新的区域的尾应该是较大的那个尾。

AC代码:

class Solution {public:    vector<Interval> merge(vector<Interval>& intervals) {        vector<Interval> res;        if(intervals.empty())            return res;        sort(intervals.begin(),intervals.end(),cmp);        res.push_back(intervals[0]);        for(int i=1;i<intervals.size();i++){            if(res.back().end<intervals[i].start)                res.push_back(intervals[i]);            else                res.back().end=max(res.back().end,intervals[i].end);        }        return res;    }    bool static cmp(struct Interval a,struct Interval b){        return a.start<b.start;    }};

然后sort还有一种写法:

sort(ins.begin(), ins.end(), [](Interval a, Interval b){return a.start < b.start;});

C++的新特性。准备挖个坑写一写C++的新特性。。。(然而这和我用它来写算法题的初衷有什么关系呢。。。