Leetcode56—合并区间

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

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

解题思路:这道题首先思考一下会有哪些合并情况,如{1,3}和{2,4}或者{1,6}和{3,4},或者{1,3}{2,7}{3,9}这种连续重叠的区域,本来想比较相邻的首尾数字,但是可能会出现多个连续重叠区间,所以使用双指针的方法保存每个区间的首尾,这样在比较过程中就只需要将指针和每个数组比较即可。

需要首先对数组进行排序,保证开端是从小到大排列的。

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if(intervals.size()<2) return intervals;
        sort(intervals.begin(),intervals.end());//排序
        vector<vector<int>> out;//存储结果
        int first=intervals[0][0];
        int last=intervals[0][1];
        for(int i=1;i<intervals.size();i++){
            if(last>=intervals[i][0]){
                last=intervals[i][1]>last?intervals[i][1]:last;//末尾指针取较大的那个数
            }
            else{
                out.push_back({first,last});
                first=intervals[i][0];
                last=intervals[i][1];
            }
        }
        out.push_back({first,last});
        return out;
    }
};
发布了17 篇原创文章 · 获赞 0 · 访问量 3223

猜你喜欢

转载自blog.csdn.net/qq_31874075/article/details/105567473