タイトル
ポータルのマージ間隔
解決策
間隔は左境界に従って並べ替えられ、ルーラーメソッドは間隔を継続的にマージし、間隔の右境界の最大値は各間隔に対して維持されます。
class Solution {
private:
static bool cmp(const vector<int> &a, const vector<int> &b){
return a[0] < b[0];
}
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
int sz = intervals.size();
if(sz <= 1) return intervals;
sort(intervals.begin(), intervals.end(), cmp);
vector<vector<int>> res(sz, vector<int>(2));
int s = 0, t = 1, sz2 = 0;
for(;;){
int m = intervals[s][1];
while(t < sz && intervals[t][0] <= m){
m = max(m, intervals[t][1]);
++t;
}
res[sz2][0] = intervals[s][0], res[sz2][1] = m;
++sz2;
if(t >= sz) break;
s = t, t = s + 1;
}
res.resize(sz2);
return res;
}
};