美文网首页
Leetcode56合并区间

Leetcode56合并区间

作者: answerLDA | 来源:发表于2019-10-29 20:15 被阅读0次

    题目

    给出一个区间的集合,请合并所有重叠的区间。

    示例 1:
    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]
    解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

    示例 2:
    输入: [[1,4],[4,5]]
    输出: [[1,5]]
    解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

    代码(含分析)

    class Solution {
    public:
    
        /**
        * 比较规则,以第一个数从小到大排序
        **/
        static bool cmp(const vector<int> x,const vector<int> y){
            return x[0]<y[0];
        }
    
        /**
        * 获取最大的数
        **/
        int max(int x,int y){
            return x>=y?x:y;
        }
        
        vector<vector<int>> merge(vector<vector<int>>& intervals) {
            if(intervals.size()<2){
                return intervals;
            }
            //先进行排序
            sort(intervals.begin(),intervals.end(),cmp);
            vector<vector<int>> res;
            int n = intervals.size(),i=0;
            while(i<n){
                //用来记录合并后的区间前后
                int a = intervals[i][0],b=intervals[i][1];
                //如果前面的右区间比后面的左区间大,那么久一直合并
                while(i<n-1 && b>=intervals[i+1][0]){
                    //取较大的右区间
                    b = max(b,intervals[i+1][1]);
                    i++;
                }
                //直到前后两个区间没有交集,就合并完毕,放在数组里面
                res.push_back({a,b});
                i++;
            }
            return res;
        } 
    };
    

    相关文章

      网友评论

          本文标题:Leetcode56合并区间

          本文链接:https://www.haomeiwen.com/subject/jpagvctx.html