56-合并区间

56-合并区间_第1张图片
1、对 vector 排序,需要按照先比较区间开始,如果相同再比较区间结束, 使用默认的排序规则即可
2、使用双指针,左边指针指向当前区间的开始
3、使用一个变量来记录连续的范围 t
4、右指针开始往后寻找,如果后续的区间的开始值比 t 还小,说明重复了,可以归并到一起
5、此时更新更大的结束值到 t
6、直到区间断开,将 t 作为区间结束,存储到答案里
7、然后移动左指针,跳过中间已经合并的区间

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end());
        vector<vector<int>>result;
        for (int i = 0; i < intervals.size(); ) {
            int t = intervals[i][1];
            int j = i + 1;
            while (j < intervals.size() && intervals[j][0] <= t) {
                t = max(t, intervals[j][1]);
                j++;
            }
            result.push_back({ intervals[i][0], t});
            i = j;
        }
        return result;
    }
};

你可能感兴趣的:(leetcode)