知识点

区间合并 贪心

思路

经典区间合并问题,按照左端点排序,相等的话按照右端点排序。维护当前加入段的左右端点,只有下一段的左端点在当前段的右端点右边,不能并入同一段,把当前段加入后,重置加入的段。剩下的情况都是可以加入的。

时间复杂度

主要瓶颈在排序上,O(nlogn)

AC code(C++)

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param intervals int整型vector<vector<>> 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > mergeTimeIntervals(vector<vector<int> >& intervals) {
        sort(intervals.begin(), intervals.end());
        vector<vector<int>> res;
        int n = intervals.size();
        int st = intervals[0][0], ed = intervals[0][1];
        for (int i = 1; i < n; i ++) {
            if (ed < intervals[i][0]) {
                res.push_back({st, ed});
                st = intervals[i][0], ed = intervals[i][1];
            }
            else {
                st = min(st, intervals[i][0]);
                ed = max(ed, intervals[i][1]);
            }
        }
        res.push_back({st, ed});
        return res;
    }
};