LeetCode.56(合并区间)

LeetCode.56(合并区间) - 中等

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

    示例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] 可被视为重叠区间。
    
  • 代码:

    //2020_04_17
    class Solution
    {
    public:
        vector<vector<int>> merge(vector<vector<int>> &intervals)
        {
            vector<vector<int>> res;     //返回结果
            int size = intervals.size(); //长度节省时间
            if (size == 0)               //处理长度为0的异常
                return res;                           
            sort(intervals.begin(), intervals.end()); //按照左端排序
            vector<int> temp = intervals[0];          //temp指向原容器中第一个元素
            for (int i = 1; i < size; i++)
            {
                if (temp[1] < intervals[i][0]) //若后左端>=前右端(无交集)
                {
                    res.push_back(temp);       //加入结果容器
                    temp[0] = intervals[i][0]; //同步修改temp
                    temp[1] = intervals[i][1];
                }
                else //若后左端<=前右端(有交集)
                {
                    if (temp[1] < intervals[i][1]) //比较右端大小
                    {
                        temp[1] = intervals[i][1]; //temp右端改为较大者
                    }
                }
            }
            res.push_back(temp); //将最后的temp加入到结果容器
            return res;
        }
    };
    
  • 结果:


原文地址:https://www.cnblogs.com/iceix/p/12717055.html