Leetcode第56题 合并区间C++解法

class Solution {
    
    
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
    
    
        vector<vector<int> > res;
        sort(intervals.begin(),intervals.end(),[](const auto& u,const auto& v)
        {
    
    
            if(u[0]==v[0])
                return u[1]>v[1];
            else
                return u[0]<v[0];
        });
        auto it=intervals.begin();
        int first=(*it)[0],second=(*it)[1];
        for(it++;it!=intervals.end();it++)
        {
    
    
            if((*it)[0]<=second)
                second=max(second,(*it)[1]);
            else
                {
    
    
                    res.push_back({
    
    first,second});
                    first=(*it)[0];
                    second=(*it)[1];
                }
        }
        res.push_back({
    
    first,second});
        return res;
    }
};

不得不说,答案的思路更清晰,对vector的运用也更好。至于双指针,我倒觉得没必要,多此一举

class Solution {
    
    
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
    
    
        vector<vector<int> > res;
        sort(intervals.begin(),intervals.end());
        for(auto it=intervals.begin();it!=intervals.end();it++)
        {
    
    
            int first=(*it)[0],second=(*it)[1];
            if(!res.size()||res.back()[1]<first)
                res.push_back({
    
    first,second});
            else
                res.back()[1]=max(res.back()[1],second);
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/meixingshi/article/details/113854826
今日推荐