首页 > 其他 > 详细

LeetCode Insert Interval

时间:2015-03-18 20:30:21      阅读:247      评论:0      收藏:0      [点我收藏+]

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

题意:合并一个区间。

思路:分情况看:首先如果对于new,end < cur.start,那么就很容易的知道应该插入cur的前面:相反,此时如果new.start > cur.end的话,那么就能继续往下走了,否则就是这样的情况:此时两个区间是有重叠的,各自取左右边界的最小和最大值。

package code;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;


public class Insert_Interval {
	
	public static void main(String[] args) {
		List<Interval> intervals = new ArrayList<Insert_Interval.Interval>();
		Insert_Interval root = new Insert_Interval();
		Insert_Interval.Interval s1 = root.new Interval(1, 3);
		intervals.add(s1);
		intervals.add(new Insert_Interval().new Interval(6, 9));
		Insert_Interval.Interval t = root.new Interval(2, 5);
		Insert_Interval.Solution solution = root.new Solution();
		List<Interval> ans = solution.insert(intervals, t);
		for (Interval interval : ans) {
			System.out.println(interval.start + "-" + interval.end);
		}
	}
	
	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 List<Interval> insert(List<Interval> intervals, Interval newInterval) {
	    	if (intervals == null || newInterval == null)
	    		return intervals;
	    	if (intervals.size() == 0) 
	    		intervals.add(newInterval);
	    	
	    	ListIterator<Interval> it = intervals.listIterator();
	    	while (it.hasNext()) {
	    		Interval tmp = it.next();
	    		if (newInterval.end < tmp.start) {
	    			it.previous();
	    			it.add(newInterval);
	    			return intervals;
	    		} else {
	    			if (newInterval.start > tmp.end) 
	    				continue;
	    			else {
	    				newInterval.start = Math.min(tmp.start, newInterval.start);
	    				newInterval.end = Math.max(tmp.end, newInterval.end);
	    				it.remove();
	    			}
	    		}
	    	}
	    	
	    	intervals.add(newInterval);
	        return intervals;
	    }
	}
}



LeetCode Insert Interval

原文:http://blog.csdn.net/u011345136/article/details/44419991

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!