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

    题意:合并一个区间。

    思路:分情况看:首先假设对于new,end < cur.start,那么就非常easy的知道应该插入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;
    	    }
    	}
    }



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    CentOS7源码安装Nginx
    CentOS7 源码安装PHP
    Linux系统终端命令提示符设置
    蓝绿发布方案
    datatable 列名重新排序
    C#后台解析 json 动态解析 通用(Dictionary)
    调用webservice 的时候没法输入参数
    soapui 调用wsdl 步骤以及出现的问题
    多文件压缩
    老毛桃+360急救箱结合(转)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4741475.html
Copyright © 2020-2023  润新知