区间并集


image.png
class Solution {
public:
    static bool cmp(vector<int>&a,vector<int>&b){
        // end从小到大,相同条件begin从大到小
        return a[1]<b[1];
    }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>>res;
        if(intervals.size()==0){
            return res;
        }
        sort(intervals.begin(),intervals.end(),cmp);
        res.push_back(intervals[0]);
        for(int i=1;i<intervals.size();i++){
            while(res.size()>0&&res.back()[0]>=intervals[i][0]){
                // pre内含于now [1,2],[3,4],[1,4] =>[1,4] / [3,4],[2,6] =>[2,6]
                // 需要pop所有内含型pre,避免遗漏,当然这些pre对结果也无影响
                res.pop_back();
            }
            if(res.size()==0){
                res.push_back(intervals[i]);
            }
            else{
                if(res.back()[1]>=intervals[i][0]&&res.back()[0]<=intervals[i][0]){
                    // 交叉型 [2,4],[3,5]=>[2,5]
                    // vector<int>v{res.back()[0],intervals[i][1]};
                    // res.pop_back();
                    // res.push_back(v);
                    res.back()[1]=intervals[i][1];
                }
                else{
                    // 分离型 [1,3],[4,6] =>[1,3],[4,6]
                    res.push_back(intervals[i]);
                }
            }
        }
        return res;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容