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