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]
.
与merge intervals(合并间隔)有点类似。
1、newInterval与当前interval没有交集,则按照先后次序加入newInterval和当前interval,然后装入所有后续interval。返回ret。
2、newInterval与当前interval有交集,合并成为新的newInterval,然后处理后续interval。
3、处理完最后一个interval若仍未返回ret,说明newInterval为最后一个interval,装入ret。返回ret
/** * 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; } * } */ class Solution { public List<Interval> insert(List<Interval> intervals, Interval newInterval) { List<Interval> res=new ArrayList<Interval>(); int i=0; while(i<intervals.size()&&intervals.get(i).end<newInterval.start){ res.add(intervals.get(i)); i++; } //一个个比较,插入的与当前的合并成新的间隔插入 , while(i<intervals.size()&&intervals.get(i).start<=newInterval.end){ newInterval=new Interval( Math.min(newInterval.start,intervals.get(i).start), Math.max(newInterval.end,intervals.get(i).end) ); i++; } res.add(newInterval); while(i<intervals.size()){ res.add(intervals.get(i)); i++; } return res; } }