Skip to content

Commit d51ba19

Browse files
solves merge intervals
1 parent eec57c1 commit d51ba19

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
| 53 | [Maximum SubArray](https://leetcode.com/problems/maximum-subarray) | [![Java](assets/java.png)](src/MaximumSubArray.java) [![Python](assets/python.png)](python/maximum_sum_subarray.py) | |
5555
| 54 | [Spiral Matrix](https://leetcode.com/problems/spiral-matrix) | [![Java](assets/java.png)](src/SpiralMatrix.java) | |
5656
| 55 | [Jump Game](https://leetcode.com/problems/jump-game) | [![Java](assets/java.png)](src/JumpGame.java) | |
57+
| 56 | [Merge Intervals](https://leetcode.com/problems/merge-intervals) | [![Java](assets/java.png)](src/MergeIntervals.java) | |
5758
| 58 | [Length of Last Word](https://leetcode.com/problems/length-of-last-word) | [![Java](assets/java.png)](src/LengthOfLastWord.java) [![Python](assets/python.png)](python/length_of_last_word.py) | |
5859
| 66 | [Plus One](https://leetcode.com/problems/plus-one) | [![Java](assets/java.png)](src/PlusOne.java) [![Python](assets/python.png)](python/plus_one.py) | |
5960
| 67 | [Add Binary](https://leetcode.com/problems/add-binary) | [![Java](assets/java.png)](src/AddBinary.java) [![Python](assets/python.png)](python/add_binary.py) | |

src/MergeIntervals.java

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// https://leetcode.com/problems/merge-intervals/submissions
2+
// T: O(n log(n))
3+
// S: O(n)
4+
5+
import java.util.ArrayList;
6+
import java.util.Arrays;
7+
import java.util.Comparator;
8+
import java.util.List;
9+
10+
public class MergeIntervals {
11+
public int[][] merge(int[][] intervals) {
12+
Arrays.sort(intervals, Comparator.comparingInt(interval -> interval[0]));
13+
final List<int[]> mergedIntervals = new ArrayList<>();
14+
int start = intervals[0][0], stop = intervals[0][1];
15+
for (int i = 1 ; i < intervals.length ; i++) {
16+
if (intervals[i][0] <= stop) stop = Math.max(stop, intervals[i][1]);
17+
else {
18+
mergedIntervals.add(new int[] {start, stop});
19+
start = intervals[i][0];
20+
stop = intervals[i][1];
21+
}
22+
}
23+
mergedIntervals.add(new int[] {start, stop});
24+
return toArray(mergedIntervals);
25+
}
26+
27+
private int[][] toArray(List<int[]> list) {
28+
int[][] result = new int[list.size()][2];
29+
int i = 0;
30+
for (int[] interval : list) {
31+
result[i++] = interval;
32+
}
33+
return result;
34+
}
35+
}

0 commit comments

Comments
 (0)