題目描述:
給出乙個區間的集合,請合併所有重疊的區間。
示例 1:輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].
示例 2:
輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
題目解析:
先按首位置進行排序;
接下來,如何判斷兩個區間是否重疊呢?比如 a = [1,4],b = [2,3]
當 a[1] >= b[0] 說明兩個區間有重疊.
但是如何把這個區間找出來呢?
左邊位置一定是確定,就是 a[0],而右邊位置是 max(a[1], b[1])
所以,我們就能找出整個區間為:[1,4]
**實現:
public static int merge(int intervals)int len = intervals.length;
//先對所有的集合按照左側邊界進行排序
arrays.sort(intervals, comparator.comparingint(o -> o[0]));
int i = 0;
while (i < len)
res.add(new int);
i++;
}return res.toarray(new int[0]);
}
時間複雜度:
時間複雜度:o(nlogn),
除去sort
的開銷,我們只需要一次線性掃瞄,所以主要的時間開銷是排序的 o(nlgn)、
空間複雜度:o(n),借助resres儲存結果
leetcode56 區間合併
題目 給出乙個區間集合,求合併所有重疊後的區間。分析 區間處理先上套路,按左端點作第一維,右端點作第二維進行排序。依次考察每個區間,假設前面所有區間合併後是 left,right 若當前區間的左端點小於等於right,right max right,當前區間的右端點 否則說明有空格,將 left,r...
56 合併區間Leetcode
給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。思路 1.將...
Leetcode 56 合併區間
對所有區間按起點位置進行排序 遍歷到k點後的 l,r 已知的包含k點的最大區間 遍歷到k 1點,若該起點屬於 l,r 那麼可能擴充套件這個區間的終點,r max r,k 1點的end definition for an interval.struct interval interval int s,...