56. 合并区间

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] 可被视为重叠区间。

这道题我们不妨先把区间(x,y)排序,x小的排在前面,x一样的y小的排在前面,同时我们给每一个区间起点标记0,终点标记1,那么示例1的区间经过排序后的标记在数轴上就是 1   2   3   6   8   10   15   18 , 即0 0 1 1 0 1 0 1。 类似于0 0  1 1的区间是可以合并的,也就是我们找到距离最远的线段端点,即有多少个连续的0,就往后找多少个1

vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<pair<int,bool>> tag; 
        for(int i=0;i<intervals.size();i++)
        {
            tag.push_back(make_pair(intervals[i][0],0));
            tag.push_back(make_pair(intervals[i][1],1));
        }
        sort(tag.begin(),tag.end());
        vector<vector<int>>ans;
        vector<int> tmp(2,0);
        int cnt=0;
        for(int i=0;i<tag.size();i++)
        {
            if(tag[i].second==0)
            {
                if(cnt==0)
                {
                    tmp[0]=tag[i].first;
                }
                cnt++;
            }
            else
            {
                if(cnt==1)
                {
                    tmp[1]=tag[i].first;
                    ans.push_back(tmp);
                }
                cnt--;
            }
        }
        return ans;
    }
原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12710995.html