Created
September 18, 2016 12:06
-
-
Save rajeakshay/3787dd3ebaf8ac2d9a17daa7f4e2247b to your computer and use it in GitHub Desktop.
LeetCode 57. Insert Interval - (Problem Link - 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…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
LeetCode 57. 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; } | |
* } | |
*/ | |
public class InsertInterval { | |
public List<Interval> insert(List<Interval> intervals, Interval newInterval) { | |
List<Interval> result = new ArrayList<Interval>(); | |
if(intervals.isEmpty()){ | |
result.add(newInterval); | |
return result; | |
} | |
intervals.add(newInterval); | |
Collections.sort(intervals, new Comparator<Interval>(){ | |
public int compare(Interval i1, Interval i2){ | |
return i1.start - i2.start; | |
} | |
}); | |
Interval current = intervals.get(0); | |
for(int i = 1; i < intervals.size(); i++){ | |
// Merge if overlap | |
if(current.end >= intervals.get(i).start){ | |
if(intervals.get(i).end > current.end){ | |
current.end = intervals.get(i).end; | |
} | |
} | |
// Add to result and start a new one | |
else{ | |
result.add(current); | |
current = intervals.get(i); | |
} | |
} | |
// Add back the last captured interval to result | |
result.add(current); | |
return result; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment