leetcode: Insert Interval

本文介绍了一种区间合并算法,该算法能够将一系列不相交的区间与一个新的区间进行比较并合并。通过分析不同情况下的区间关系,实现了有效的区间合并过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为原来的intervals是不想交且的,所以对原来的每一个区间,和要插入的区间对比,考虑如下情况:

绿色表示当前的intervals[i],黑色表示新的interval。


/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
public class Solution {
    public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
        ArrayList<Interval> rst=new ArrayList<Interval>();
        int n=intervals.size();
        Interval tmp;
        int c_x=newInterval.start,c_y=newInterval.end;
        int flag=0;
        for(int i=0;i<n;i++)
        {
        	tmp=new Interval(intervals.get(i).start,intervals.get(i).end);
        	if(flag==0)
        	{
	        	if(tmp.end<c_x)
	        		rst.add(tmp);
	        	else if(tmp.end>=c_x && tmp.end<=c_y)
	        	{
	        		if(c_x>=tmp.start)
	        			c_x=tmp.start;
	        	}
	        	else if(tmp.start>=c_x && tmp.start<=c_y)
	        	{
	        		if(c_y<=tmp.end)
	        			c_y=tmp.end;
	        	}
	        	else if(tmp.start<c_x && tmp.end>c_y)
	        	{
	        	    c_x=tmp.start;
	        		c_y=tmp.end;
	        	}
	        	else if(tmp.start>c_y)
	        	{
	        		rst.add(new Interval(c_x,c_y));
	        		flag=1;
	        		rst.add(tmp);
	        	}
        	}
        	else
        		rst.add(tmp);
        }
        if(flag==0)
        	rst.add(new Interval(c_x,c_y));
        //for(int i=0;i<rst.size();i++)
        //	System.out.println(rst.get(i).start+" "+rst.get(i).end);
        return rst;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值