leetcode_merge_intervals 发表于 2016-11-24 难度:Hard 解题思路:先依照start进行排序,然后从前往后的找大时间段。代码如下。 123456789101112131415161718192021222324252627282930313233343536373839404142/** * 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%