C++ 合并区间
//给出一组区间,请合并所有重叠的区间。 //请保证合并后的区间按区间起点升序排列。 //区间结构体 struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : start(s), end(e) {} }; //比较结构:比较区间start的大小 struct cmp { inline constexpr bool operator()(Interval& lhs, Interval& rhs) { return lhs.start < rhs.start; } }; vector<Interval> merge(vector<Interval> &intervals) { int length = intervals.size(); vector<Interval> result; if (length < 1) return result; //首先对根据interval的start进行开始由小到大的排序。 std::sort(intervals.begin(), intervals.end(), cmp()); //设置当前区间 Interval temp = intervals[0]; for (int i = 1; i < length; ++i) { //当当前区间的temp.end小于intervals[i].start时, //说明区间之间出现了空隔,则证明当前区间该结束了。 if (temp.end < intervals[i].start) { result.push_back(temp); temp = intervals[i]; } //当temp.end不小于intervals[i].start,但小于intervals[i].end时, //则将当前区间的尾部延伸至intervals[i].end; else if (temp.end < intervals[i].end) { temp.end = intervals[i].end; } } result.push_back(temp); return result; }