算法设计与分析HW7:LeetCode56.Merge Intervals

Description:

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


Solution:

  Analysis and Thinking:

分析题目的要求可得,问题要求获得输入的一组由若干数组组成的数组集合,将其中有重叠的元素进行合并。解决方法应该分为两步:一是找到相邻间隔,二是查看元素是否有重叠,并将重叠的元素合并。这里,首先需要依据间隔的起始时间对输入数组排序,然后遍历输入,判断是否有重叠的依据是,若当前一个间隔的结束时间大于等于其开始时间,则有重叠,需要合并。

  

  Steps:

1.将数组集合中的第一个间隔拷贝到新的数组中,该数组为待返回结果数组

2.从输入的第二个元素开始,遍历输入,重复3、4

3.查看是否有重叠情况,若有,改变结果数组的最后元素的结束时间

4.若无重叠情况,将输入的结合的该元素添加入结果数组

5.返回结果数组

  

Codes:

bool compare(Interval in1,Interval in2)
{
    if in1.start<in2.start
        return 1;
    else
        return 0;
}

class Solution
{
public:
    vector<Interval> merge(vector<Interval> &intervalsInput)
    {
        vector<Interval> result_tempi;
        
        if(intervalsInput.size()==0)
            return result_tempi;
        sort(intervalsInput.begin(),intervalsInput.end(),compare);
        
        result_tempi.push_back(intervalsInput[0]);
        
        for(int i=1;i<intervalsInput.size();i++)
        {
            if(result_tempi[result_tempi.size()-1].end >=intervalsInput[i].start)
                result_tempi[result_tempi.size()-1].end=max(result_tempi[result_tempi.size()-1].end,intervalsInput.end);
            else
                result_tempi.push_back(intervalsInput[i]);
        
        }
        return result_tempi;
    }
};


Results:





发布了35 篇原创文章 · 获赞 0 · 访问量 4642
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章