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

 

合并给定的区间

1、按区间头递增排序;

2、从头开始向后扫描:将临时区间设为第0个区间

     2.1、后一个区间的头小于临时区间的尾,将两者合并;

     2.2、后一个区间的头大于临时区间的尾,将临时区间插入输出结果,将后一个区间作为新的临时区间;

 

代码:

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
bool cm(const Interval &i1,const Interval &i2);	//按头位置递增排序

class Solution {
public:
    vector<Interval> merge(vector<Interval> &intervals) {
		vector<Interval> ans;
        sort(intervals.begin(),intervals.end(),cm);	//排序
		int len=intervals.size();
		if(len==0)
			return ans;
		Interval itemp;	//临时数据,用于合并操作
		itemp.start=intervals[0].start;
		itemp.end=intervals[0].end;
		for(int i=1;i<len;i++)	//扫描,合并
		{
			if(intervals[i].start<=itemp.end)	//后面的头小于前面的尾,合并
				itemp.end=max(intervals[i].end,itemp.end);
			else	//不能再合并,压入,取新的区间
			{
				ans.push_back(itemp);
				itemp.start=intervals[i].start;
				itemp.end=intervals[i].end;
			}
		}
		ans.push_back(itemp);	//处理最后一个
		return ans;
    }
};

bool cm(const Interval &i1,const Interval &i2)
{
	return i1.start<i2.start;
}


 

 

 

 

 

你可能感兴趣的:(LeetCode,C++,算法)