LeetCode-56. Merge Intervals
阿新 • • 發佈:2018-03-06
leet 一個 == etc art UC merge pan emp
一、問題描述
給定一系列區間,要求將其中重疊的、臨接的區間合並成一個區間
例子:
給定[1,3],[2,6],[8,10],[15,18]
輸出[1,6],[8,10],[15,18]
二、問題解決
第一步:先對區間按區間頭進行排序
第二步:從第一個區間開始遍歷,如果後一個區間與前一個區間有重疊或是緊挨著,則合並,並且繼續往後讀。如果沒有,則將該區間加入result中,並且以下一個區間為起始區間重復這一步。
//表示區間的結構 struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : start(s), end(e) {} }; //排序函數 void mysort(vector<Interval>& intervals) { for (int i = 0; i < intervals.size(); i++) { int pos = i; while (pos < intervals.size()) { if (intervals[pos].start < intervals[i].start) swap(intervals[pos], intervals[i]); pos++; } } } vector<Interval> merge(vector<Interval>& intervals) { vector<Interval> result; if (intervals.size() == 0) return result; mysort(intervals); int pos = 0; while (pos < intervals.size()) { Interval temp(intervals[pos].start,intervals[pos].end);while (++pos < intervals.size() && intervals[pos].start <= temp.end) temp.end = max(intervals[pos].end,temp.end); result.emplace_back(temp); } return result; } //這是測試用例 int main() { vector<Interval> v = {Interval(1,4),Interval(0,4)}; auto result = merge(v); for (auto i : result) { cout << i.start; cout << i.end; cout << endl; } system("pause"); return 0; }
LeetCode-56. Merge Intervals