leetcode---- 56. 合併區間
阿新 • • 發佈:2018-12-22
給出一個區間的集合,請合併所有重疊的區間。
示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].
示例 2:
輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
需要注意的問題:
1. 邊界問題,特別是給定資料為空,或者只有一個的情況
2 自定義比較函式,注意這裡加上static關鍵字
或者在函式中這樣寫
sort(intervals.begin(), intervals.end(), [](Interval &a, Interval &b) {return a.start < b.start;});
3 我本來可以獨立完成的,不自信。
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ class Solution { public: static bool cmp(const Interval &a, const Interval &b) { return a.start < b.start; } vector<Interval> merge(vector<Interval>& intervals) { sort(intervals.begin(),intervals.end(),cmp); vector<Interval> res; if(intervals.size()==0) return res; if(intervals.size()==1) {res.push_back(intervals[0]); return res; } int a[intervals.size()] ={0}; Interval it1,it2; for(int i=0;i<intervals.size()-1;i++) { it1=intervals[i]; it2=intervals[i+1]; if(it1.end>=it2.start) { a[i]=0; a[i+1]=1; intervals[i+1].start=it1.start; intervals[i+1].end=max(it1.end,it2.end); } else { a[i]=1; a[i+1]=1; }; } for(int i=0;i<intervals.size();i++) { if(a[i]) res.push_back(intervals[i]); } return res; } };