插入间隔
“插入间隔”问题的详细指南和 Python 实现。
1. 学习
“插入间隔”问题是间隔部分的一个关键挑战。
此实现侧重于 Python 中的简单级逻辑。
在我们提供的解决方案中,我们优先考虑技术准确性和代码可读性。
2. Real-World Applications
3. Visual Intuition
可视化插入间隔的逻辑流程。
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
仔细阅读插入间隔的问题陈述。
2. Formulate brute force
起草一个简单的迭代解决方案。
3. Identify inefficiency
寻找冗余计算。
4. Optimize search path
使用散列或排序来加速该过程。
5. Final Implementation
清理生产标准代码。
问题陈述
给定一个不重叠的间隔数组,其中间隔[i] = [starti, endi] 表示第 i 个间隔的开始和结束,并且间隔按 starti 升序排序。您还会获得一个间隔 newInterval = [start, end],表示另一个间隔的开始和结束。将 newInterval 插入间隔,使得间隔仍然按 starti 升序排序,并且间隔仍然没有任何重叠间隔(如有必要,合并重叠间隔)。
返回插入后的间隔。
编写一个函数 insert(intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]。
- •0 <= len(intervals) <= 10^4
- •intervals[i].length == 2
- •0 <= starti <= endi <= 10^5
- •intervals is sorted by starti in ascending order
- •newInterval.length == 2
- •0 <= start <= end <= 10^5
示例
intervals = [[1,3],[6,9]], newInterval = [2,5]
[[1,5],[6,9]]
The new interval [2,5] overlaps with [1,3], so they are merged into [1,5].
intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
[[1,2],[3,10],[12,16]]
Because [4,8] overlaps with [3,5],[6,7],[8,10], they merge to [3,10].
Need a Hint?
Edge Cases to Watch
- 空输入结构
- 单元素输入
- 大数值范围
准备好解决了吗?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
面试见解和变化
复杂性分析分解
为什么时间: Directly evaluates all possibilities.
为什么选择太空: Uses standard local memory.
为什么时间: Optimized paths reduce total operations.
为什么选择太空: May trade memory for speed.
优化解决方案Python代码
优化解决方案Python代码
def insert_opt(intervals, newInterval):
res = []
for i in range(len(intervals)):
if newInterval[1] < intervals[i][0]:
res.append(newInterval); return res + intervals[i:]
elif newInterval[0] > intervals[i][1]:
res.append(intervals[i])
else:
newInterval = [min(newInterval[0], intervals[i][0]), max(newInterval[1], intervals[i][1])]
res.append(newInterval); return res暴力破解代码(剧透保护)
暴力破解代码(剧透保护)
def insert_brute(intervals, newInterval):
intervals.append(newInterval); intervals.sort()
res = []
for i in intervals:
if not res or i[0] > res[-1][1]: res.append(i)
else: res[-1][1] = max(res[-1][1], i[1])
return resAlgorithm Pattern Checklist
When dealing with Intervals data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
推荐的 Python 资源
通过相关的交互式教程、备忘单和代码比较来扩展您的知识。
Python 循环:For 和 While 循环解释
了解如何使用 Python 循环来迭代数据。通过交互式示例掌握 for 循环、while 循环、break、continue 和循环最佳实践。
如何在 Python 中对列表进行排序(升序和降序)
了解如何在 Python 中使用 sort() 方法和sorted() 函数对列表进行排序。发现自定义键排序和逆序示例。
Python 字符串方法备忘单
Python 字符串操作的完整参考指南。掌握格式化、搜索、拆分、替换和检查字符串属性。
Python 与 JavaScript:哪种编程语言最好?
Python 和 JavaScript 的全面比较。探索语法差异、性能、用例(后端与前端)和编码示例。