您的位置:首页 > 其它

leetcode 刷题之路 32 Merge Intervals

2014-07-30 21:00 417 查看
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]
.

给定一组整数对代表的区间,合并重合的区间。

我的做法是首先以区间的起始位置为基准进行排序,遍历排序后的区间数组,对于相邻的位置i和i+1,当区间i的右边界小于区间i+1的左边界时,两个区间不重叠,把区间i保存到结果数组中,当区间i的左边界大于区间i+1的右边界时,把两个区间合并,合并后的区间覆盖到区间i+1上,然后以区间i+1为当前区间进行处理,重复以上步骤直到数组结尾,数组的最后一个区间要么是和其前面的区间和并的结果,要么不和前面的区间重叠,两种情况都是要保存到结果数组中,最后返回结果数组。

代码:

/**
 * 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:
	vector<Interval> merge(vector<Interval> &intervals)
	{
		vector<Interval> vi;
		if (intervals.empty())
			return vi;
		sort(intervals.begin(), intervals.end(), cmp);
		
		for (int i = 0; i < intervals.size()-1; i++)
		{
			if (intervals[i].end < intervals[i + 1].start)
				vi.push_back(intervals[i]);
			else
			{
				if (intervals[i].end>intervals[i + 1].end)
					intervals[i + 1].end = intervals[i].end;
				intervals[i + 1].start = intervals[i].start;
			}
		}
		vi.push_back(intervals[intervals.size()-1]);
	}
	bool static cmp(const Interval& i1, const Interval& i2)
	{
		return i1.start < i2.start;
	}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: