Question:
Given a collection of intervals, merge all overlapping intervals.
Example:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Note:
First, we can sort the array according to the starting point of each interval, and then compare the adjacent interval to see if there’s overlap, if so, merge them.
Solution:
class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length == 1 || intervals.length == 0) {
return intervals;
}
Arrays.sort(intervals, (i1, i2)->Inreger.compare(i1[0], i2[0]));
List<int[]> res = new ArrayList<>();
int[] newInterval = intervals[0];
res.add(newInterval);
for (int[] interval : intervals) {
if (interval[0] <= newInterval[1]) {
// if there's an overlapping
newInterval[1] = Math.max(interval[1], newInterval[1]);
} else {
newInterval = interval;
res.add(newInterval);
}
}
return res.toArray(new int[res.size()][]);
}
}
Time Complexity:
- The time complexity of sort is O(nlog(n))
- In total is O(nlog(n)) + O(n)