# LeetCode怎么插入區間
## 引言
在算法學習和面試準備中,LeetCode是一個不可或缺的平臺。其中,區間類問題(如合并區間、插入區間等)是常見的題型,考察對數據結構的掌握和邏輯思維能力。本文將詳細解析LeetCode中的“插入區間”問題(題目編號:57),從問題描述、解題思路到代碼實現,幫助讀者徹底掌握這類問題的解決方法。
---
## 問題描述
### 題目:插入區間(Insert Interval)
給定一個**無重疊**且**按照起始端點排序**的區間列表,插入一個新的區間,確保列表中的區間仍然有序且不重疊(必要時合并區間)。
**示例 1:**
```plaintext
輸入:intervals = [[1,3],[6,9]], newInterval = [2,5]
輸出:[[1,5],[6,9]]
解釋:新區間 [2,5] 與 [1,3] 重疊,合并為 [1,5]。
示例 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] 重疊,合并為 [3,10]。
def insert(intervals, newInterval):
result = []
i = 0
n = len(intervals)
# 添加所有結束點小于新區間起始點的區間
while i < n and intervals[i][1] < newInterval[0]:
result.append(intervals[i])
i += 1
# 合并重疊區間
while i < n and intervals[i][0] <= newInterval[1]:
newInterval[0] = min(newInterval[0], intervals[i][0])
newInterval[1] = max(newInterval[1], intervals[i][1])
i += 1
result.append(newInterval)
# 添加剩余區間
while i < n:
result.append(intervals[i])
i += 1
return result
intervals = [[5,8]], newInterval = [1,3] → [[1,3],[5,8]]
intervals = [[1,2]], newInterval = [4,5] → [[1,2],[4,5]]
intervals = [[1,5],[6,8]], newInterval = [3,7] → [[1,8]]
# 測試示例
assert insert([[1,3],[6,9]], [2,5]) == [[1,5],[6,9]]
assert insert([[1,2],[3,5],[6,7],[8,10],[12,16]], [4,8]) == [[1,2],[3,10],[12,16]]
assert insert([], [5,7]) == [[5,7]]
assert insert([[1,5]], [6,8]) == [[1,5],[6,8]]
插入區間問題的核心在于正確處理重疊邏輯和高效遍歷已排序區間。通過分階段處理(無重疊、合并、剩余區間),可以清晰地將問題分解。掌握此類問題后,其他區間類題目(如合并、交集等)的解決思路也會迎刃而解。
通過反復練習和測試邊界情況,可以提升對區間問題的敏感度和代碼魯棒性。
”`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。