這是leetcode上的一道題目,
原題目表述如下:
給定一組區間,合併所有有重疊的區間.
例子1:
input: [[1,3],[2,6],[8,10],[15,18]]
output: [[1,6],[8,10],[15,18]]
解釋: 由於[1,3] 和 [2,6] 有重疊區域, 合併為 [1,6].
例子2:
input: [[1,4],[4,5]]
output: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間.
原題目給的乙個區間的結構定義如下:
實現如下:type interval struct
思路如下:func
mergeinterval
(intervals [
]interval)
interval
sort.
ints
(starts)
sort.
ints
(ends)
i :=
0 j :=
0// 經過排序之後,starts相對ends一定是「整體偏小」的
// 可能有如下兩種情況
// 情況1,有「交集」
// starts: ● ● ●
// ends: ● ● ●
// 情況2,無「交集」
// starts: ● ● ●
// ends: ● ● ●
for; i < n; i++
) j = i +1}
}return results
}
首先按輸入的intervals分別生成starts和ends, 然後將starts和ends排序.
這樣, 就剩下兩種可能了(點在橫向的相對位置表示其大小,可以想像成數軸):
那麼重疊的部分其實就是:情況1,有「交集」
starts: ● ● ●
ends: ● ● ●
情況2,無「交集」
starts: ● ● ●
ends: ● ● ●
starts[i+1] > ends[i]
. 具體請看**(結合上面的圖看好想一些).
參考:歡迎補充指正.
合併區間問題
法一 分類討論思想 排序後,不用管左區間,只更新,討論右邊區間 法二 想象成一條線段,見下面 線段左端為最小左區間 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...
合併區間問題
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 解釋 區...