區間合併問題 merge intervals

2021-08-30 14:03:09 字數 1325 閱讀 3384

這是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 解釋 區...