0057. 插入区间
题目地址(57. 插入区间)
https://leetcode-cn.com/problems/insert-interval/
题目描述
前置知识
排序
公司
阿里
腾讯
百度
字节
排序
思路
一个简单的思路是将 intervals 和 newInterval 合并成一个数组并排序,那么问题就和 56. 合并区间 类似,而56. 合并区间 是一个中等题,思路参考 56. 合并区间 即可。
代码
语言支持: Python3
复杂度分析
时间复杂度:由于采用了排序,因此复杂度大概为 $O(NlogN)$
空间复杂度:$O(1)$
一次扫描
思路
由于没有卡时间复杂度,因此上面的代码也不会超时。但是实际的面试可能并不会通过,我们必须考虑线性时间复杂度的做法。
力扣有很多测试用例卡的不好的题目,以至于暴力法都可以过,但是大家不要抱有侥幸心理,否则真真实面试的时候会后悔。
newInterval 相对于 intervals 的位置关系有多种:
newInterval 在左侧
newInterval 在右侧
newInterval 在中间
而 newInterval 在中间又分为相交和不相交,看起来比较麻烦,实际却不然。来看下我的具体算法。
算法描述:
从左往右遍历,对于遍历到的每一项姑且称之为 interval。
如果 interval 在 newInterval 左侧不相交,那么不断 push interval 到 ans。
否则不断合并 interval 和 newInterval,直到合并之后的新区间和 interval 不重合,将合并后的大区间 push 到 ans。融合的方法参考上方 56 题。
后面不可能发生重合了(题目保证了),因此直接将后面的 interval 全部添加到 ans 即可
最终返回 ans
代码
语言支持: Python3
复杂度分析
时间复杂度:$O(N)$
空间复杂度:$O(1)$
最后更新于