1. 程式人生 > >Leetcode演算法——57、插入區間(insert interval)

Leetcode演算法——57、插入區間(insert interval)

給定一系列不重複的區間,要求將一個新的區間插入到這些集合中(如果有必要,則合併)。

假設這些區間已經根據起始位置排好序了。

示例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))