双指针 力扣 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表示区间连续的范围,右指针指向下一个区间的开始,若比 x 小则可以合并,若比 x 大则断开区间,并移动左指针跳过已经合并的区间
代码

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>>a;
        int s=intervals.size();
        sort(intervals.begin(),intervals.end());
        for(int i = 0; i < s;)
        {
            int x=intervals[i][1];
            int h=i+1;
            while(h < s && intervals[h][0] <= x )//顺序不能变!!
            {
                x=max(x,intervals[h][1]);
                h++;
            }
            a.push_back({intervals[i][0],x});
            i=h;
        }
        return a;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_46039856/article/details/106643444