Merge Intervals问题及解法

来源:互联网 发布:u盘安装linux系统 编辑:程序博客网 时间:2024/05/19 00:43

问题描述:

Given a collection of intervals, merge all overlapping intervals.

示例:
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

问题分析:

将各个间隔按照start排序,依次比较前一个end和后一个的start,看是否可以合并。


过程详见代码:

/** * 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> res;if (intervals.empty()) return res;sort(intervals.begin(), intervals.end(), [](Interval a, Interval b){return a.start < b.start; });res.push_back(intervals[0]);for (int i = 1; i < intervals.size(); i++){if (res.back().end < intervals[i].start) res.push_back(intervals[i]);else res.back().end = max(res.back().end, intervals[i].end);}return res;    }};


原创粉丝点击