56. Merge Intervals
O(nlogn), O(n)
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals == null || intervals.length == 0) return intervals;
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> result = new ArrayList<>();
int start = intervals[0][0];
int end = intervals[0][1];
for (int interval[] : intervals) {
// 這裡會是第一個元素先近來, 也沒差(預設s e 第一個元素
// 跑完還是會第一個元素的 s e
if (end >= interval[0]) {
end = Math.max(end, interval[1]); // for this case [[1,4],[2,3]]
} else {
result.add(new int[]{start, end});
start = interval[0];
end = interval[1];
}
}
// 最後還要加上最後的 s e
result.add(new int[]{start, end});
return result.toArray(new int[result.size()][]);
}
}本題主要核心當然是
s1 e1
s2 e2
if s >= e 時 do merge(update end)
但是是用 start end 來表示
else
add data(to List), update start, end
注意 array sort
注意最後還要加
和 list 如何轉 array
newest version
Last updated
Was this helpful?