
难度:Hard
解题思路:先依照start进行排序,然后从前往后的找大时间段。
代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
/** * 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: vector<Interval> merge(vector<Interval>& intervals) { vector<Interval> ret; if(intervals.empty()) return ret; sort(intervals.begin(), intervals.end(),[](Interval &lhs,Interval &rhs){return lhs.start < rhs.start;}); //lambda函数 auto it = intervals.begin(); int merge_start = -1, merge_end = -1; for(; it != intervals.end(); it++) { if(merge_start == -1 && merge_end == -1) { merge_start = it->start; merge_end = it->end; } else { if(merge_end < it->start) { ret.push_back(Interval(merge_start, merge_end)); merge_start=it->start; merge_end=it->end; } else if(merge_end >= it->start) { merge_end = max(merge_end, it->end); } } } ret.push_back(Interval(merge_start, merge_end)); return ret; } };
|
运行结果:时间16ms,超过54.43%
近期评论