給出乙個區間的集合,請合併所有重疊的區間。
示例 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.若當前區間不再滿足合併條件或者遍歷到了集合末尾,就構建新合併區間,其中左端點為初始區...