Leetcode題目56 合併區間(中等)

2022-03-26 12:53:26 字數 951 閱讀 8970

題目描述:

給出乙個區間的集合,請合併所有重疊的區間。

示例 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,...