56. 合并区间

        给定若干个区间的集合,将重叠的区间合并后,放入一个数组中返回。

        具体思路就是按左端点排序后合并区间,因为按左端点排序后,可以确保每次合并都是以最小元素为合并后区间的起始,并且按左端点排序可以方便合并,因为只需要确定当前合并的区间开始是否在前一个区间的结束内,如果是,就可以合并,如果不是,将当前区间放入答案中即可。

        具体算法:

        将intervals数组的第一个元素放入ans中,ans的最后一个元素的右端点与当前元素的左端点比较,如果当前元素的左端点小于ans的最后一个元素的右端点,可以合并,更新合并后的右端点为两个区间右端点的最大值,如果不可以合并,将当前区间直接放入答案即可

        代码:

class Solution {
public:
    vector> merge(vector>& intervals) {
        ranges::sort(intervals);
        if(intervals.size() == 1) return intervals;
        vector> ans;
        for (auto it:intervals) {
            if (!ans.empty() && it[0] <= ans.back()[1]){
                ans.back()[1] = max(it[1],ans.back()[1]);
            }else{
                ans.push_back(it);
            }
        }
        return ans;
    }
};

你可能感兴趣的:(算法,数据结构,leetcode,c++)