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;
    }
    
    

    题目来源

  • 相关阅读:
    rest简单实例
    Rest简介
    java视频
    j2ee开发中的“java容器”和“web容器”有什么区别?
    用Java实现自己的ArrayList
    Java中关于枚举的7种用法
    Java多线程实现自然同步(内含演示案例)
    Java实现简单的文件复制
    Java之自动拆装箱
    写一个SingleTon,(饿最终、懒同步)
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8582914.html
Copyright © 2011-2022 走看看