您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。