Leetcode: Merge/Insert Interval

题目

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

 

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

 
思路:
1. 模拟题
2. Insert Interval 是 Merge Interval 的扩展, 将 newInterval 插入到 Intervals 即可转化成 Merge Interval
 
代码
bool sortInterval(const Interval &i1, const Interval &i2) {
	return i1.start < i2.start;
}
class Solution {
public:
    vector<Interval> merge(vector<Interval> &intervals) {
		vector<Interval> newVec;
		if(intervals.size() <= 0)
			return newVec;
		
		sort(intervals.begin(), intervals.end(), sortInterval);
		for(int i = 0; i < intervals.size(); i ++) {
			Interval nextInt = intervals[i];
			if(i == intervals.size()-1) {
				newVec.push_back(nextInt);
				break;
			}
			Interval tmp = intervals[i+1];
			while(tmp.start <= nextInt.end) {
				nextInt.end = max(tmp.end, nextInt.end);
				i++;
				if(i+1<intervals.size())
					tmp = intervals[i+1];
				else {
					newVec.push_back(nextInt);
					return newVec;
				}
			}
			newVec.push_back(nextInt);
		}
		return newVec;
    }
};

  

posted @ 2014-01-10 10:30  SangS  阅读(896)  评论(0编辑  收藏  举报