56. 合并区间

题目描述

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:        //由于我们只是排序,不改变参数,所以用了常量        
    static bool cmp(const vector<int> &one,const vector<int> &two)
    {
        return one[0]<=two[0];
    }

    vector<vector<int>> merge(vector<vector<int>>& intervals) {

        vector<vector<int>> ret;
        if(intervals.size() == 0)
            return ret;
        if(intervals.size() == 1)
        {
            ret.push_back(intervals[0]);
            return ret;
        }

        sort(intervals.begin(),intervals.end(),cmp);
        vector<int> first = intervals[0];//候选完成区间,先拿在手里
        for(int i =1;i<intervals.size();i++)//遍历,流式处理
        {
            vector<int> two = intervals[i];
            //一个区间是否合并完成由后面的区间元素说了算
            if(two[0]>first[1])
            {
                ret.push_back(first);
                first = two;
            }
            else
                first[1] = max(first[1],two[1]);
        }

        ret.push_back(first);
        return ret;
        
    }
};

posted on 2021-04-05 07:11  朴素贝叶斯  阅读(23)  评论(0编辑  收藏  举报

导航