Leetcode演算法——57、插入區間(insert interval)
阿新 • • 發佈:2018-12-20
給定一系列不重複的區間,要求將一個新的區間插入到這些集合中(如果有必要,則合併)。
假設這些區間已經根據起始位置排好序了。
示例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]]
思路
本題與Leetcode演算法——56、合併區間(merge intervals)
在插入區間之前,首先要找到需要插入到哪個位置,從左到右掃描,然後比較新區間和陣列內區間的起始點的大小即可找到。
然後將新區間插入到陣列(插入的過程可能會涉及到與上一個區間的重疊合並),插入之後,剩餘的子陣列可能會與這個區間有重疊部分,需要依次進行掃描判斷。
python實現
def insert(intervals, newInterval):
"""
:type intervals: List[Interval]
:type newInterval: Interval
:rtype: List[Interval]
"""
result = []
# 查詢新的區間應該插入的地方
i = 0
for i in range(len(intervals)):
if intervals[i][0] >= newInterval[0]:
break
result.append(intervals[i])
# 處理剩下的區間
for cur_inter in [newInterval] + intervals[i:]:
if result and cur_inter[0] <= result[ -1][1]:
result[-1][1] = max(result[-1][1], cur_inter[1])
else:
result.append(cur_inter)
return result
if '__main__' == __name__:
intervals = []
newInterval = [4,8]
print(insert(intervals, newInterval))