給出乙個無重疊的 ,按照區間起始端點排序的區間列表。
在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 1:
輸入:intervals =[[
1,3]
,[6,
9]], newinterval =[2
,5]輸出:[[1
,5],
[6,9
]]
示例 2:
輸入:intervals =[[
1,2]
,[3,
5],[
6,7]
,[8,
10],[
12,16]
], newinterval =[4
,8]輸出:[[1
,2],
[3,10
],[12
,16]]
解釋:這是因為新的區間 [4,
8] 與 [3,
5],[
6,7]
,[8,
10] 重疊
注意:輸入型別已在 2019 年 4 月 15 日更改。請重置為預設**定義以獲取新的方法簽名。
這道題思想上倒不難,有一些小細節需要考慮到。
將當前區間分為幾種情況進行處理。
特別注意:整個過程需要標記下新增區間是否已處理,未處理需要增加到結果中
class
solution
return res;
}//新增區間包含在當前區間中
if(newinterval[0]
>= intervals[i][0
]&& newinterval[1]
<= intervals[i][1
])//新增區間需要和當前區間合併if(
(newinterval[0]
<= intervals[i][1
]&& newinterval[1]
>= intervals[i][0
])||(newinterval[1]
>= intervals[i][0
]&& newinterval[1]
<= intervals[i][1
])))
;//依次判斷後面的區間是否和res中的最後乙個區間合併
int j = i +1;
while
(j < intervals.
size()
)else
++j;
}return res;
}//新增區間大於當前區間,需要將當前區間放在結果中
if(newinterval[0]
> intervals[i][1
])}if
(!flag)
return res;}}
;
思想類似,但是更簡潔:
特別注意:這裡flag的作用是保證新增區間插入到結果中並且只插入一次
class
solution
:def
insert
(self, intervals: list[list[
int]],
newinterval: list[
int])-
> list[list[
int]]:
flag =
false
res =
for interval in intervals:
# 在插入區間的右側,且沒有交集,這裡需要判斷下新增區間是否已插入到結果中
if interval[0]
> newinterval[1]
:ifnot flag:
flag =
true
# 在插入區間的左側
elif interval[1]
< newinterval[0]
:# 需要和插入區間合併
else
: newinterval[0]
=min
(newinterval[0]
, interval[0]
) newinterval[1]
=max
(newinterval[1]
, interval[1]
)ifnot flag:
return res
LeetCode 57 插入區間
幾個注意點 1.原集合為空 2.插入在最開始的位置 3.插入在末尾位置 4.插入在中間 可以通過新增標誌,沒有新增就每次都去判斷重疊情況進行新增 vectorresult if intervals.size 0 bool isadd false for int i 0 i intervals.siz...
leetcode57 插入區間
給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...
leetcode 57 插入區間
給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...