56. Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
Example 1:
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].
Example 2:
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considerred overlapping.
My Solutions:
先按照start time排序,然后观察第i个的end time(last.end)和第i+1个的start time(curr.start)
1。如果last.end < curr.start, 把last加入结果
2。不然的话,把last变成 (last.start, max(last.end, curr.end))
记住最后一个last也要加入结果
class Solution {
public List<Interval> merge(List<Interval> intervals) {
if (intervals == null || intervals.size() <= 1) return intervals;
Collections.sort(intervals, new Comparator<Interval>() {
public int compare(Interval a, Interval b) {
return a.start - b.start;
}
});
// 也可以这样写
intervals.sort((i1, i2)-> {
return Integer.compare(i1.start, i2.start);
});
List<Interval> list = new ArrayList<>();
Interval last = intervals.get(0);
for (int i = 1; i < intervals.size(); i++) {
Interval curr = intervals.get(i);
if (last.end < curr.start) { //interval is not continuous
list.add(last);
last = curr;
} else {
last.end = Math.max(last.end, curr.end);
}
}
list.add(last);
return list;
}
}
如果input是int[][],可以这样写
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
// 或者
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
return Integer.compare(a[0], b[0]);
}
});
ArrayList<int[]> 可以转化为二维int[][]
ArrayList<int[]> res = new ArrayList<>();
res.toArray(new int[res.size()][]);
Last updated