Leetcode027--插入区间

一、原题



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



二、中文



给定一系列非覆盖的区间,插入一个新的区间,有必要的时候进行区间合并,区间开始是以起始时间进行合并的 



三、举例



原来的区间是[2,5] 第二个区间是[6,9] 当我们插入一个区间[4,7]后,最后得到的区间是[2,9]


四、思路



1、如果插入的区间比集合的end小,就直接插入

2、如果插入的区间的end比带插入区间的start小,就插入到里边

3、插入区间有重叠,更新就更新插入区间,start选小的,end选大的



五、程序



package code;

import java.util.*;

class Interval2 { 
	int start; 
	int end; 
	Interval2(){
		start = 0;
		end = 0;
	} 
	Interval2(int s, int e){
		start = s;
		end = e;
	}
}

public class LeetCode35{
	
	public static void main(String args[]){
		LinkedList<Interval2> num = new LinkedList<Interval2>();
		
		Interval2 in1 = new Interval2(1, 3);
		Interval2 in2 = new Interval2(4, 6);
		Interval2 in3 = new Interval2(8, 10);
		Interval2 in4 = new Interval2(13, 20);
		num.add(in1);
		num.add(in2);
		num.add(in3);
		num.add(in4);
		
		Interval2 add = new Interval2(5, 9);
		
		LinkedList<Interval2> list = insertRegion(num, add);
		
		Iterator<Interval2> it = list.iterator();
		while(it.hasNext()){
			Interval2 iter = it.next();
			System.out.print(iter.start+" ");
			System.out.print(iter.end+" ");
		}
	}


	public static LinkedList<Interval2> insertRegion(LinkedList<Interval2> intervals, 
			Interval2 newInterval) {
		//保存结果集
		LinkedList<Interval2> res = new LinkedList<Interval2>();
		
		//输入集如果是非空的
		if(intervals != null){
			for(Interval2 item : intervals){
				if(newInterval == null || item.end < newInterval.start){
					res.add(item);
				}
				
				//将比插入区间大的区间插入到结果集中
				else if(item.start > newInterval.end){
					res.add(newInterval);
					res.add(item);
					newInterval = null;
				}
				
				//插入区间有重叠,更新插入区间
				else{
					newInterval.start = Math.min(newInterval.start, item.start);
					newInterval.end = Math.max(newInterval.end, item.end);		
				}

			}
		}
		
		return res;
	}
	
	
}
	

------------------------output----------------------------

1 3 4 10 13 20 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值