zoukankan      html  css  js  c++  java
  • 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;
    }
    
    

    题目来源

  • 相关阅读:
    Treap 模板 poj1442&hdu4557
    2016多校第六场题解(hdu5793&hdu5794&hdu5795&hdu5800&hdu5802)
    hdu5785--Interesting(manacher)
    hdu5792--World is Exploding
    HDU5791--Two (DP)
    HDU5781--ATM Mechine(概率dp)
    hdu5773--The All-purpose Zero(LIS变形)
    hdu5769--Substring(后缀数组)
    poj1743--Musical Theme(后缀数组)
    HDU5739-Fantasia(tarjan求割点)
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8582914.html
Copyright © 2011-2022 走看看