LeetCode 區間合併類問題

2021-10-03 00:13:03 字數 1776 閱讀 9504

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

示例 1: 輸入: [[1,3],[2,6],[8,10],[15,18]], 輸出: [[1,6],[8,10],[15,18]]

解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].

class solution );

for(

int i =

0; i < intervals.

size()

;++i)

res.

push_back

(temp);}

return res;}}

;

給出乙個無重疊的 ,按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。

示例 1: 輸入: intervals = [[1,3],[6,9]], newinterval = [2,5] 。輸出: [[1,5],[6,9]]

分析1:插入後排序,從頭到尾遍歷合併。

class solution);

for(

int i =

0; i < intervals.

size()

;++i)

res.

push_back

(temp);}

return res;}}

;

分析2:二分找到區間頭部該插入的位置,然後向左右擴充套件合併區間。

右邊情況比較複雜,可能會合併好幾個區間,左邊因為之前二分定位過了,可以肯定最多向左合併乙個區間。

class solution 

// 二分查詢

while

(l < r)

// 判定特殊情況,這裡是將區間整個插入到原有區間序列的頭或尾

int x = newinterval[0]

, y = newinterval[1]

;if(intervals[l][0

]> y &&

(l ==

0|| l >

0&& intervals[l -1]

[1]< x)

|| intervals[l][1

]< x));

sort

(intervals.

begin()

,intervals.

end())

;return intervals;

}// 向右合併

while

(r < intervals.

size()

&& intervals[r][0

]<= y)

//向左合併

if(l >

0&& intervals[l -1]

[1]>= x)

// 去除已經合併的區間

intervals.

erase

(intervals.

begin()

+ l, intervals.

begin()

+ r)

; intervals.

push_back()

;sort

(intervals.

begin()

,intervals.

end())

;return intervals;}}

;

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 輸入 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 可被視為重疊區間。思路分析 此...

leetcode 區間合併

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