LeetCode 56 合併區間

2022-08-29 16:54:28 字數 1170 閱讀 8790

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

示例 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] 可被視為重疊區間。

首先對集合中區間按照起始位置進行排序(sort預設按第乙個元素排序)

將第乙個區間加入結果集

對於後面每個區間,如果當前區間起始位置大於結果集中最後乙個區間結尾位置,則無重疊,之間加入結果集;否則,取兩區間最大結尾位置為新結尾位置

時間複雜度:o(nlogn),主要為sort

空間複雜度:o(logn),sort所需空間複雜度

class solution  else 

}return res;

}};

將起始位置和結尾位置分別放到兩個不同陣列starts和ends中,並分別進行排序,然後用兩個指標i和j分別指向starts和ends首位置,如果i指向starts最後乙個位置或starts[i + 1] 大於 ends[i],則表明兩個區間沒有交集,則將此時[starts[j], ends[i]]放入結果集,並更新j為新的起始位置,即i + 1。比如:

starts: 1 2 8 15

ends: 3 6 10 18

starts[i+1] = 8, ends[i] = 6,此時區間不連續,將區間[starts[j], ends[i]],即[1,6]加入結果集。

時間複雜度:o(nlogn),主要為sort

空間複雜度:o(n)

class solution 

sort(starts.begin(), starts.end());

sort(ends.begin(), ends.end());

for (int i = 0, j = 0; i < size; ++i) );

j = i + 1;}}

return res;

}};

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

LeetCode 56 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 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 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 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 可被視為重疊區間。題意還是好理...