給區間列表,合併所有重疊/相鄰區間。例如 [[1,3],[2,6],[8,10],[15,18]] → [[1,6],[8,10],[15,18]]。
class Solution {
public:
vector> merge(vector>& intervals) {
if (intervals.empty()) return {};
sort(intervals.begin(), intervals.end(), [](auto& a, auto& b) {
return a[0] < b[0] || (a[0] == b[0] && a[1] < b[1]);
});
vector> res;
vector cur = intervals[0];
for (int i = 1; i < intervals.size(); ++i) {
if (intervals[i][0] <= cur[1]) {
cur[1] = max(cur[1], intervals[i][1]);
} else {
res.push_back(cur);
cur = intervals[i];
}
}
res.push_back(cur);
return res;
}
};
嘗試開大小為跨度的布爾數組標記覆蓋,但坐標範圍不定,記憶體超限 (MLE)。排序法無此問題。
Merge Intervals 是區間問題的基礎模板:**排序 + 線性合並**。掌握此模板,可解決所有區間合併、插入、交集、並集等變體問題。