Leetcode 57:插入區間(超詳細解決方案!!!)
阿新 • • 發佈:2019-01-11
給出一個*無重疊的 ,*按照區間起始端點排序的區間列表。
在列表中插入一個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 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] 重疊。
解題思路
這個問題非常簡單,主要分成如下幾種情況考慮。
所以我們現將前面沒有交集的區間先新增到res
中去,也就是
while i < inter_len and intervals[i].end < newInterval.start:
res.append(intervals[i])
i += 1
接著就是對上述四中情況的判斷
newInterval.start = min(newInterval.start, intervals[i].start)
newInterval.end = max(newInterval.end, intervals[i].end)
while i < inter_len and intervals[i].start <= newInterval.end:
newInterval.start = min(newInterval.start, intervals[i].start)
newInterval.end = max(newInterval.end, intervals[i].end)
i += 1
最後將剩餘的區間新增過去即可。
class Solution:
def insert(self, intervals, newInterval):
"""
:type intervals: List[Interval]
:type newInterval: Interval
:rtype: List[Interval]
"""
inter_len = len(intervals)
res, i = list(), 0
while i < inter_len and intervals[i].end < newInterval.start:
res.append(intervals[i])
i += 1
while i < inter_len and intervals[i].start <= newInterval.end:
newInterval.start = min(newInterval.start, intervals[i].start)
newInterval.end = max(newInterval.end, intervals[i].end)
i += 1
res.append(newInterval)
while i < inter_len:
res.append(intervals[i])
i += 1
return res
我將該問題的其他語言版本新增到了我的GitHub Leetcode
如有問題,希望大家指出!!!