56. Merge Intervals

56. Merge Intervals

题目

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]. 

解析

  • 分析:题目要求对区间进行合并,首先必须对区间按照左边元素的大小进行排序,然后对排序后的数组进行遍历,合并。能够合并的区间必须符合 a.begin <=b.begin <= a.end.
//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:

    static int compare(Interval val1,Interval val2)
    {
        return val1.start < val2.start;
    }

    vector<Interval> merge(vector<Interval>& intervals) {

        if (intervals.size()<=1)
        {
            return intervals;
        }
        sort(intervals.begin(),intervals.end(),compare); //按第一关键字排序
        vector<Interval> vec;
        Interval temp=intervals[0];
        
        for (int i = 1; i < intervals.size(); i++)
        {
            Interval node = intervals[i]; //取出每一个节点
            if (node.start<=temp.end)
            {
                temp.end = max(temp.end,node.end);  // [[1,4],[2,3]]
            }
            else
            {
                vec.push_back(temp);
                temp = intervals[i];
            }
        }
        vec.push_back(temp);
        return vec;
    }
};

题目来源

    原文作者:ranjiewen
    原文地址: https://www.cnblogs.com/ranjiewen/p/8581311.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞