56. Merge Intervals

来源:互联网 发布:radeon pro 580windows 编辑:程序博客网 时间:2024/05/18 20:36

Given a collection of intervals, merge all overlapping intervals.

For example,

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

思路:此题个人感觉需要先排序,然后在循环中判断当前区间和下一区间之间的关系,可以分为四种情况:
当前区间为first,下一区间为second

  • fisrt.start == second.start && first.end <= second.end—-此时合并两个区间
  • fisrt.start <= second.start && first.end >= second.end—-当前区间包含下一区间,则进入下一次循环
  • first.end >= second.end,合并两个区间
  • 跳出循环
struct Interval {    int start;    int end;    Interval() : start(0), end(0) {}    Interval(int s, int e) : start(s), end(e) {}};vector<Interval> merge(vector<Interval>& intervals) {    if (intervals.size() <= 1)return intervals;    vector<Interval> res;    sort(intervals.begin(), intervals.end(), [](const Interval& s1, const Interval& s2){return s1.start < s2.start; });    int k = 0;    while (k < intervals.size()){        Interval temp = intervals[k];        k++;        while (k < intervals.size()){            if (temp.start == intervals[k].start && temp.end <= intervals[k].end){                temp.end = intervals[k].end;                k++;            }            else if (temp.start <= intervals[k].start && temp.end >= intervals[k].end){                k++;                continue;            }            else if (temp.end >= intervals[k].start){                temp.end = intervals[k].end;                k++;            }            else break;        }        res.push_back(temp);    }    return res;}