合併區間問題

2021-10-08 06:30:49 字數 1180 閱讀 6040

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.對區間進行排序,獲得乙個有序區間陣列

按照區間的左端點排序,那麼在排完序的列表中,可以合併的區間一定是連續的。如下圖所示,標記為藍色、黃色和綠色的區間分別可以合併成乙個大區間,它們在排完序的列表中是連續的:

2.用陣列 merged 儲存最終的答案

首先,我們將列表中的區間按照左端點公升序排序。然後我們將第乙個區間加入 merged 陣列中,並按順序依次考慮之後的每個區間:

(1)如果當前區間的左端點在陣列 merged 中最後乙個區間的右端點之後,那麼它們不會重合,我們可以直接將這個區間加入陣列 merged 的末尾;

(2)否則,它們重合,我們需要用當前區間的右端點更新陣列 merged 中最後乙個區間的右端點,將其置為二者的較大值。

class

solution;}

sort

(intervals.

begin()

, intervals.

end())

;//先對傳入的區間陣列進行排序

vector

int>> merged;

for(

int i =

0; i < intervals.

size()

;++i));

}//當前傳入的區間的左端元素大於merge陣列中的右端元素或merge陣列中還沒有元素,則直接傳入該區間

else

}return merged;}}

;

合併區間問題

法一 分類討論思想 排序後,不用管左區間,只更新,討論右邊區間 法二 想象成一條線段,見下面 線段左端為最小左區間 minl 右端為最大右區間 maxr 用兩個陣列存左右區間,有點就 1,最後遍歷,當兩個陣列不為零且出現次數相等就 1.alll為左端點出現次數,allr為右端點出現次數 測試用例 樣...

區間合併問題

給定 n 個閉區間 ai bi 其中i 1,2,n。任意兩個相鄰或相交的閉區間可以合併為乙個閉區間。例如,1 2 和 2 3 可以合併為 1 3 1 3 和 2 4 可以合併為 1 4 是 1 2 和 3 4 不可以合併。運用分治的思想 include include using namespace...

區間排程之區間合併問題

還是先看一道題 一 解題思路 乙個區間可以表示為 start,end 區間重疊區間排程問題,需要按 end 排序,以便滿足貪心選擇性質。而對於區間合併問題,其實按 end 和 start 排序都可以,不過為了清晰起見,我們選擇按 start 排序。顯然,對於幾個相交區間合併後的結果區間 x,x.st...