Leetcode: intervals

https://leetcode.com/problems/merge-intervals/description/
56. Merge Intervals
这个题比较有意思的应该就是sort的写法。

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> merge(vector<Interval>& intervals) {
        vector<Interval> res;
        if(intervals.size() < 1) return res;      
        sort(intervals.begin(), intervals.end(), compare);       
        Interval candi = intervals[0];
        
        for(int i = 1; i < intervals.size(); i++)
        {
            if(intervals[i].start > candi.end)
            {
                res.push_back(candi);
                candi = intervals[i];
            }
            else
            {
                candi.end = max(candi.end, intervals[i].end);
            }
        }
        
        res.push_back(candi);
        return res;
    }
    
    static bool compare(Interval a, Interval b)
    {
        return a.start == b.start ? a.end < b.end : a.start < b.start; 
    }
};

https://leetcode.com/submissions/detail/58964086/
57. Insert Interval
这种interval题貌似没有什么trick
逻辑清楚就好,分三部分,前面,中间,后面
前面就是比newInt.begin小的部分,后面就是比newInt.end大的部分,中间是需要merge的。
merge的方式都是找到最小的start,和最大的end

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
        vector<Interval>res;
        Interval candi = newInterval;
        int i = 0;
        for(; i < intervals.size(); i++)
        {
            if(intervals[i].end < newInterval.start)
            {
                res.push_back(intervals[i]);
            }
            else
            {
                break;
            }
        }
        
        for(; i < intervals.size() && intervals[i].start <= newInterval.end; i++)
        {
            candi.start = min(candi.start, intervals[i].start);
            candi.end = max(candi.end, intervals[i].end);           
        }     
        res.push_back(candi);
         for(; i < intervals.size(); i++)
        {
            res.push_back(intervals[i]);
        }                    
        return res;        
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43476349/article/details/84106734