搜索網(wǎng)站排名軟件公司開發(fā)設計推薦
跟著carl學算法,本系列博客僅做個人記錄,建議大家都去看carl本人的博客,寫的真的很好的!
代碼隨想錄
LeetCode:56.合并區(qū)間
以數(shù)組 intervals 表示若干個區(qū)間的集合,其中單個區(qū)間為 intervals[i] = [starti, endi] 。請你合并所有重疊的區(qū)間,并返回 一個不重疊的區(qū)間數(shù)組,該數(shù)組需恰好覆蓋輸入中的所有區(qū)間 。
示例 1:
輸入:intervals = [[1,3],[2,6],[8,10],[15,18]]
輸出:[[1,6],[8,10],[15,18]]
解釋:區(qū)間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].
示例 2:
輸入:intervals = [[1,4],[4,5]]
輸出:[[1,5]]
解釋:區(qū)間 [1,4] 和 [4,5] 可被視為重疊區(qū)間。
- 類似前面的弓箭射氣球問題,這里需要注意左邊界是
res
里面最后一個元素的左邊界 - 重疊的時候需要刪除
res
里面上一個元素,再重新插入新元素
public int[][] merge(int[][] intervals) {Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));LinkedList<int[]> res = new LinkedList<>();res.add(intervals[0]);for (int i = 1; i < intervals.length; i++) {if (intervals[i][0] <= intervals[i - 1][1]) {intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]);// 注意,這里新數(shù)組的start不是 i-1的左邊界,而是res中最后一個元素的左邊界int start = res.getLast()[0];int end = intervals[i][1];// 注意這里需要移除res中最后一個的元素 然后才能插入新元素res.removeLast();res.add(new int[] { start, end });} else {res.add(intervals[i]);}}return res.toArray(new int[res.size()][]);}