标签:style blog color io ar for sp div art
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].
1 /** 2 * Definition for an interval. 3 * public class Interval { 4 * int start; 5 * int end; 6 * Interval() { start = 0; end = 0; } 7 * Interval(int s, int e) { start = s; end = e; } 8 * } 9 */ 10 public class Solution { 11 public List<Interval> insert(List<Interval> intervals, Interval newInterval) { 12 if (newInterval == null) return intervals; 13 if (intervals == null || intervals.size() == 0) { 14 intervals.add(newInterval); 15 return intervals; 16 } 17 int newleft = newInterval.start; 18 int newright = newInterval.end; 19 if (newleft > newright) return intervals; 20 ArrayList<Interval> res = new ArrayList<Interval>(); 21 int lastleft = -1; 22 int lastright = -1; 23 int i = 0; 24 for (; i<intervals.size(); i++) { 25 Interval cur = intervals.get(i); 26 if (newright < cur.start) { 27 if (lastleft == -1 && lastright == -1) { 28 lastleft = newleft; 29 lastright = newright; 30 } 31 else { 32 lastright = newright; 33 } 34 res.add(new Interval(lastleft, lastright)); 35 res.add(cur); 36 break; 37 } 38 if (newleft < cur.start && newright >= cur.start && newright <= cur.end) { 39 if (lastleft == -1 && lastright == -1) { 40 lastleft = newleft; 41 } 42 lastright = cur.end; 43 res.add(new Interval(lastleft, lastright)); 44 break; 45 } 46 if (newleft < cur.start && newright > cur.end) { 47 if (lastleft == -1 && lastright == -1) { 48 lastleft = newleft; 49 } 50 } 51 if (newleft >= cur.start && newright <= cur.end) { 52 res.add(cur); 53 break; 54 } 55 if (newleft >= cur.start && newleft <= cur.end && newright > cur.end) { 56 lastleft = cur.start; 57 } 58 if (newleft > cur.end) { 59 res.add(cur); 60 } 61 } 62 for (i=i+1; i<intervals.size(); i++) { 63 res.add(intervals.get(i)); 64 } 65 if (newright > intervals.get(intervals.size()-1).end) { 66 if (lastleft == -1 && lastright == -1) { 67 lastleft = newleft; 68 } 69 lastright = newright; 70 res.add(new Interval(lastleft, lastright)); 71 } 72 return res; 73 } 74 }
别人的一个比较简便的做法:
1 public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) { 2 ArrayList<Interval> res = new ArrayList<Interval>(); 3 if(intervals.size()==0) 4 { 5 res.add(newInterval); 6 return res; 7 } 8 int i=0; 9 while(i<intervals.size() && intervals.get(i).end<newInterval.start) 10 { 11 res.add(intervals.get(i)); 12 i++; 13 } 14 if(i<intervals.size()) 15 newInterval.start = Math.min(newInterval.start, intervals.get(i).start); 16 res.add(newInterval); 17 while(i<intervals.size() && intervals.get(i).start<=newInterval.end) 18 { 19 newInterval.end = Math.max(newInterval.end, intervals.get(i).end); 20 i++; 21 } 22 while(i<intervals.size()) 23 { 24 res.add(intervals.get(i)); 25 i++; 26 } 27 return res; 28 }
标签:style blog color io ar for sp div art
原文地址:http://www.cnblogs.com/EdwardLiu/p/4006905.html