[LintCode] Insert Interval

Posted Push your limit!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LintCode] Insert Interval相关的知识,希望对你有一定的参考价值。

Given a non-overlapping interval list which is sorted by start point.

Insert a new interval into it, make sure the list is still in order and non-overlapping (merge intervals if necessary).

Example

Insert [2, 5] into [[1,2], [5,9]], we get [[1,9]].

Insert [3, 4] into [[1,2], [5,9]], we get [[1,2], [3,4], [5,9]].

 

Algorithm: 

Iterate over the original interval list one by one and keep an insertion position for the new interval.

Case 1: newInterval is after the current interval:  If the current interval‘s end < newInterval‘s start, insert the current interval to the new list, increment the insertion position by 1.

Case 2: newInterval is before the current interval: Else if the current interval‘s start > newInterval‘s end, insert the current interval to the new list. 

Case 3: newInterval overlaps with the current interval. Update the newInterval‘s start and end to cover both intervals. 

Repeat the above steps until all intervals in the original list are processed. 

Finally, insert the newInterval to the saved insertion position. 

 

 1 /**
 2  * Definition of Interval:
 3  * public classs Interval {
 4  *     int start, end;
 5  *     Interval(int start, int end) {
 6  *         this.start = start;
 7  *         this.end = end;
 8  *     }
 9  */
10 public class Solution {
11     public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
12         if (newInterval == null) {
13             return intervals;
14         }
15         ArrayList<Interval> results = new ArrayList<Interval>();
16         if(intervals == null) {
17             results.add(newInterval);
18             return results;
19         }
20         int insertPos = 0;
21         for (Interval interval : intervals) {
22             if (interval.end < newInterval.start) {
23                 results.add(interval);
24                 insertPos++;
25             } else if (interval.start > newInterval.end) {
26                 results.add(interval);
27             } else {
28                 newInterval.start = Math.min(interval.start, newInterval.start);
29                 newInterval.end = Math.max(interval.end, newInterval.end);
30             }
31         }
32         results.add(insertPos, newInterval);
33         return results;
34     }
35 }

 

 

Related Problems 

Merge Intervals

以上是关于[LintCode] Insert Interval的主要内容,如果未能解决你的问题,请参考以下文章

lintcode-easy-Insert Node in a Binary Search Tree

LintCode060.Search Insert Position

[Leetcode + Lintcode] 35. Search Insert Position

Lintcode30 Insert Interval solution 题解

[LintCode] Insert into a Cyclic Sorted List

[LintCode] Insert Node in a Binary Search Tree