LeetCode #56 题解报告

LeetCode #56 题解报告

问题描述
给出若干个闭区间,我们的任务是将这些区间交(merge)起来,得到一系列新的闭区间。
如:
原区间集:[1,3] [2,6] [8,10] [15,18]
merge后:[1,6] [8,10] [15,18]

算法分析

  1. 按照区间左端点的大小排序,得到左端点从小到大的新区间集。
  2. 新建两个变量start,end,分别表示当前区间的左右端点。
  3. 枚举排好序的区间集。
  4. 如果第i个区间左端点比end大,则当前start和end就是我们merge起来的一个新区间。保存答案后,即可将start跟新为第i个区间的左端点,end更新为第i个区间的右端点。
  5. 否则,更新end=max(end,第i个区间的右端点)。
  6. 完成枚举后记得再保存最后一次的[start,end]区间。
  7. 时间复杂度:O(n)

代码

bool compare(Interval a,Interval b)
{
    return(a.startclass Solution {
public:
    vector merge(vector& intervals) {
        int len=intervals.size();
        vector ans;
        if (intervals.empty()) return ans;
        sort(intervals.begin(),intervals.end(),compare);
        int st=intervals[0].start;
        int en=intervals[0].end;
        for (int i=1;iif (intervals[i].start>en)
            {
                ans.push_back(Interval(st,en));
                st=intervals[i].start;
                en=intervals[i].end;
            }
            else en=max(en,intervals[i].end);
        }
        ans.push_back(Interval(st,en));
        return ans;
    }
};

你可能感兴趣的:(LeetCode #56 题解报告)