LeetCode题解之区间问题

148 阅读1分钟

题目

56. 合并区间

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        int n = intervals.size();
        vector<vector<int>> res;
        if(!n) return res;
        sort(intervals.begin(), intervals.end());
        int s = intervals[0][0], e = intervals[0][1];
        for(int i = 1; i < n; i ++) 
        {
            if(intervals[i][0] > e)//新区间
            {
                res.push_back({s,e});
                s = intervals[i][0];
                e = intervals[i][1];
            }
            else e = max(e, intervals[i][1]);
        }
        res.push_back({s,e});
        return res;
    }
    
};

57. 插入区间

class Solution {
public:
    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& p) {
        vector<vector<int>> res;
        int n = intervals.size();
        int i = 0;
        while(i < n && intervals[i][1] < p[0])
        {
            res.push_back(intervals[i]);
            i ++;
        }
        while(i < n && intervals[i][0] <= p[1])
        {
            p[0] = min(p[0], intervals[i][0]);
            p[1] = max(p[1], intervals[i][1]);
            i ++;
        }
        res.push_back(p);
        while(i < n)
        {
            res.push_back(intervals[i]);
            i ++;
        }
        return res;
    }
};