Insert Interval

AC

vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) 
{
 
    if(intervals.empty())
    {
    	intervals.push_back(newInterval);
    	return intervals;
    }

    vector<int> val;
 
	for(int i=0;i < intervals.size();++i)
	{
		val.push_back(intervals[i].start);
 
		val.push_back(intervals[i].end);
 
	}
	int st=0;
	int ed=0;
	int m=0;
	int n=val.size()-1;
	int s_flag=0;
	int e_flag=0;
	while(m < val.size() && n >= 0)
	{
		

		if(val[m] >= newInterval.start && s_flag == 0)
		{
			st=m;//记录端点
			s_flag=1;
		}

		if(val[n] <= newInterval.end && e_flag == 0)
		{
			ed=n;
			e_flag=1;
		}
		++m;		
		--n;
	}
 	if(s_flag == 0)
 	{
 		intervals.push_back(newInterval);
 		return intervals;
 	}


 	if(s_flag == 1 && e_flag ==1)根据左右端点进行区分
 	{
 		if(st%2 == 0 && ed%2 == 0)
 		{
 			vector<Interval> tmp;
 			for(int i=0;i < st/2;++i)
 			{
 				tmp.push_back(intervals[i]);
 			}
 			Interval nInterval(newInterval.start,val[ed+1]);

 			tmp.push_back(nInterval);

 			for(int i=ed/2+1;i < intervals.size();++i)
 			{
 				tmp.push_back(intervals[i]);
 			}

 			return tmp;
 		}
 		if(st%2 == 0 && ed%2 == 1)
 		{
 			vector<Interval> tmp;
 			for(int i=0;i < st/2;++i)
 			{
 				tmp.push_back(intervals[i]);
 			}
 			Interval nInterval(newInterval.start,newInterval.end);
 			tmp.push_back(nInterval);

 			for(int i=(ed+1)/2;i < intervals.size();++i)
 			{
 				tmp.push_back(intervals[i]);
 			}
 			return tmp;
 		}
 		if(st%2 == 1 && ed%2 == 0)
 		{
 			vector<Interval> tmp;
 			for(int i=0;i < (st-1)/2;++i)
 			{
 				tmp.push_back(intervals[i]);
 			}
 			Interval nInterval(val[st-1],val[ed+1]);
 			tmp.push_back(nInterval);
 			for(int i=ed/2+1;i < intervals.size();++i)
 			{
 				tmp.push_back(intervals[i]);
 			}
 			return tmp;
 		}
 		if(st%2 == 1 && ed%2 == 1)
 		{
 			vector<Interval> tmp;
 			for(int i=0;i < (st-1)/2;++i)
 			{
 				tmp.push_back(intervals[i]);
 			}
 			Interval nInterval(val[st-1],newInterval.end);
 			tmp.push_back(nInterval);
			for(int i=(ed+1)/2;i < intervals.size();++i)
 			{
 				tmp.push_back(intervals[i]);
 			}
 			return tmp;
 		}

 	}
 	if(e_flag ==0)
 	{
 		intervals.insert(intervals.begin(),newInterval);
 		return intervals;
 	}

}


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值