# 合并区间

# 1.1 题目

题目

# 1.2 解题思路

很难评价这道题目的意义,没有特别多的技巧,单纯的见招拆招,给我一种写了和没写差不多的感觉,没有成就感和收获.
简单说一下思路:

  1. 题目中说若干区间,但是没有说是有序的,所以我们需要先对区间进行排序.
  2. 检测相邻的两个区间,前者的左端点大于等于后者的右端点,则代表二者的右侧区间有重合,合并为一个区间 (对应操作则为更新区间的右端点)
  3. 重复该操作,直到当前区间的与下一个区间的右侧无重合,则将下一个区间加入结果集,并更新下标结果集的索引值 (对应操作为向 res 中压入一个区间).
  4. 重复 2-3 步骤,直到所有区间都被合并.

# 1.3 代码实现

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        int n = intervals.size();
        vector<vector<int>> res;
        sort(intervals.begin(), intervals.end());
        int j = 0;
        res.push_back(intervals[0]);
        for (int i = j + 1; i < n; i++) {
            // When the right of the current interval is bigger than the left of the
            // next interval, merge them
            if (intervals[i][0] <= res[j][1]) {
            res[j][1] = max(res[j][1], intervals[i][1]);
            } else {
            // On the contrary, add the current interval to the result
            res.push_back(intervals[i]);
            j++;
            }
        }
        return res;
    }
};

大道五十,天衍四十九,人遁其一!