Fork me on GitHub

57. Insert Interval

57. Insert Interval

题目

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

解析

  • 此题可以借鉴56的解题思路
  • 另外由于本题说明Given a set of non-overlapping intervals初始没有重叠元素,只是需要更改加入的区间即可,见参考代码
class Solution_57 {
public:
	static int compare(Interval val1, Interval val2)
	{
		return val1.start < val2.start;
	}

	vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {

		vector<Interval> vec;
		if (intervals.empty())
		{
			vec.push_back(newInterval);
			return vec;
		}
		intervals.push_back(newInterval);
		sort(intervals.begin(), intervals.end(), compare);

		Interval node = intervals[0]; //
		for (int i = 1; i < intervals.size();i++)
		{
			Interval temp = intervals[i];
			if (node.end>=temp.start)
			{
				node.end = max(node.end,temp.end);
			}
			else
			{
				vec.push_back(node);
				node = temp;
			}
		}
		vec.push_back(node);

		return vec;
	}
};


vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
    vector<Interval> ret;
    auto it = intervals.begin();
    for(; it!=intervals.end(); ++it){
		if(newInterval.end < (*it).start) //all intervals after will not overlap with the newInterval
			break; 
		else if(newInterval.start > (*it).end) //*it will not overlap with the newInterval
			ret.push_back(*it); 
        else{ //update newInterval bacause *it overlap with the newInterval
            newInterval.start = min(newInterval.start, (*it).start);
            newInterval.end = max(newInterval.end, (*it).end);
        }	
    }
    // don't forget the rest of the intervals and the newInterval
	ret.push_back(newInterval);
	for(; it!=intervals.end(); ++it)
		ret.push_back(*it);
	return ret;
}

题目来源

posted @ 2018-03-16 16:02  ranjiewen  阅读(144)  评论(0编辑  收藏  举报