LC56. Merge Intervals
Array sorted by start time. Because we need to know the initial start time of the whole intervals.
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length == 0) return new int[0][0];
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
int start = intervals[0][0];
int end = intervals[0][1];
List<int[]> res = new ArrayList<>();
for(int i = 1; i < intervals.length; i++) {
if(intervals[i][0] <= end) {
end = Math.max(intervals[i][1], end);
} else {
res.add(new int[]{start, end});
start = intervals[i][0];
end = intervals[i][1];
}
}
res.add(new int[]{start, end});
return res.toArray(new int[res.size()][2]);
}
}
LC57. Insert Interval
Original array is already sorted and no overlap. So no need to sort.
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> res = new ArrayList<>();
int start = newInterval[0];
int end = newInterval[1];
int i = 0;
while(i < intervals.length && intervals[i][1] < start) {
res.add(new int[]{intervals[i][0], intervals[i][1]});
i++;
}
while(i < intervals.length && intervals[i][0] <= end) {
start = Math.min(start, intervals[i][0]);
end = Math.max(end, intervals[i][1]);
i++;
}
res.add(