2015.04.01 Leetcode Insert interval

来源:互联网 发布:sql 计算查询结果合计 编辑:程序博客网 时间:2024/05/29 00:33

Insert Interval解法:
先用start,end两个变量来定位 newinterval可能要插入的起始点和结束点。 分三种情况来看是否需要调整或合并(merge)。
case1: 在start 之前直接copy 到结果res; case2: 在end之后也是直接copy到res中; case3: 需要合并的就是newInterval.start, newInterval.end, 和任选的一个interval 的interval.start , interval.end 四个边界的比较。 下面是源代码 和我的github链接https://github.com/hustbill/java-OJ/blob/master/InsertInterval.java


<pre name="code" class="java">/*https://leetcode.com/problems/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].*//** * 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; } * } */import java.util.ArrayList;import java.util.List;import java.util.Collections;import java.util.Comparator;import java.util.*;public class InsertInterval {     /**     * In place solution     * Find start and end point of the interval to be merged     */    public static List<Interval> insert(List<Interval> intervals, Interval newInterval) {List<Interval> res = new ArrayList<Interval>();        if (intervals == null||intervals.size() == 0){            res.add(newInterval);            return res;        }int start=0, end = 0;  // find the insert position for newInterval , to be insert or mergedfor( Interval interval : intervals) {if(newInterval.start > interval.end) start++;if(newInterval.end >= interval.start)  end++;    else break;}if(start== end) {  // no need merge, just copy all intervals into resres.addAll(intervals);res.add(start, newInterval) ;    // insert the new onereturn res;}for(int i=0; i< start; i++)  res.add(intervals.get(i));// intervl and newInterval are a closer rangeInterval interval = new Interval( Math.min( intervals.get(start).start, newInterval.start),Math.max( intervals.get(end-1).end,  newInterval.end));  // note that, it's end-1res.add(interval);for(int j=end; j< intervals.size(); j++) {res.add(intervals.get(j));   // after the newInterval insert, copy the remains into res}return res;}public static void testCase1() {// Case 1:System.out.println("Case 1");Interval interval0 = new Interval(1,2);// Interval interval0 = new Interval(0,1);Interval interval1 = new Interval(3,5);Interval interval2 = new Interval(6, 7);Interval interval3 = new Interval(8, 10);Interval interval4 = new Interval(12, 16);List<Interval> intervals = new ArrayList<Interval>();intervals.add(interval0);intervals.add(interval1);intervals.add(interval2);intervals.add(interval3);intervals.add(interval4);printIntervals(intervals);Interval newInterval_1 = new Interval(4,9);// Interval newInterval_1 = new Interval(4,11);System.out.println("\nstart Insert newInterval_1 : " + newInterval_1.start + " , " + newInterval_1.end);intervals = insert(intervals, newInterval_1);printIntervals(intervals);}public static void testCase2() {// Case 2System.out.println("\n\nCase 2");Interval interval5 = new Interval(0, 1);Interval interval6 = new Interval(4, 9);List<Interval> intervals2 = new ArrayList<Interval>();intervals2.add(interval5);intervals2.add(interval6);printIntervals(intervals2);Interval newInterval_2 = new Interval(2,5); System.out.println("start Insert newInterval2 : " + newInterval_2.start + " , " + newInterval_2.end);intervals2 = insert(intervals2, newInterval_2);printIntervals(intervals2);}public static void testCase3() {// Case 3System.out.println("\n\nCase 3");Interval interval5 = new Interval(1, 5);List<Interval> intervals2 = new ArrayList<Interval>();intervals2.add(interval5);printIntervals(intervals2);Interval newInterval_2 = new Interval(2,3); System.out.println("start Insert newInterval2 : " + newInterval_2.start + " , " + newInterval_2.end);intervals2 = insert(intervals2, newInterval_2);//printIntervals(intervals2);}public static void main(String[] args){testCase1(); testCase2(); testCase3();}public static void printIntervals(List<Interval> intervals) {//System.out.println(intervals);for (int i = 0; i < intervals.size(); i++) {           System.out.println("Index: " + i + " - Item: "    + intervals.get(i).start + " "+ intervals.get(i).end);}}}


                                             
0 0
原创粉丝点击