LeetCode: Merge Intervals

思路:先对区间进行排序,按照起始点进行升序排列,然后使用贪心算法,对于目前的区间[start, end],找到下一个区间[start_i, end_i] ,因为已经排好序了,所以,start_i >= start,只考虑与end的比较,如果start_i <end 说明区间有重合,可以合并,如果start_i > end说明与当前区间没有交集,将当前区间存入解向量中,继续后面的搜索。

code:

bool cmp(const Interval &A, const Interval &B ){
    return A.start < B.start;
}
class Solution {
public:

    vector<Interval> merge(vector<Interval> &intervals) {
        vector<Interval> ret;
        if(intervals.empty())return ret;
        sort(intervals.begin(),intervals.end(),cmp);
        Interval curInter = intervals[0];
        for(int i=1;i<intervals.size();i++){
            if(intervals[i].start <= curInter.end)
                curInter.end = max(curInter.end,intervals[i].end);
            else{
                ret.push_back(curInter);
                curInter = intervals[i];
            }
        }
        ret.push_back(curInter);
        return ret;
    }
};


你可能感兴趣的:(LeetCode: Merge Intervals)