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; } } }
原文:http://blog.csdn.net/u011345136/article/details/44419991