LeetCode 合併區間

2021-09-10 18:52:16 字數 1732 閱讀 6031

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

示例 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是b的子集還是b是a的子集,則重疊的情況就分為了四種。那能不能找到一種操作,在合併之前就將所有的情況合併為一種情況呢?答案顯然是有的——排序。此處的排序需要以左區間為主次序遞增,右區間為輔次序遞增。即首先保證左區間遞增,如果某兩個元素的左區間相同,那麼則比較他們的右區間。排序後再進行合併即可。

示例**

//更新i的end

雖然通過了,但是實在是太慢了!

接下來我們想想如何優化**。

優化思路:不難發現,此演算法最為消耗時間的莫過於intervals.erase(intervals.begin() + i + 1);因為vector容器是非鏈式容器,在隨機訪問上快速,在刪除上比較慢。而且此演算法是在給定的引數上進行修改合併,我們可以新建乙個容器進行存放結果,從而降低複雜度。

(可以自己先實現優化後的**,再來比較一下誰的**更精簡。)

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 可被視為重疊區間。i...

leetcode 區間合併

個區間若能合併,則第乙個區間的右端點一定不小於第二個區間的左端點。所以先把區間集合按照左端點從小到大進行排序,接著從第乙個區間開始遍歷,對每個區間執行如下操作 1.首先儲存該區間的左端點start和右端點end 3.若當前區間不再滿足合併條件或者遍歷到了集合末尾,就構建新合併區間,其中左端點為初始區...

LeetCode 合併區間

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