LeetCode Insert Interval
2016-01-13 09:15
288 查看
LeetCode解题之Insert Interval
原题
给出多个不重合的数据区段,现在插入一个数据区段,有重合的区段要进行合并。注意点:
所给的区段已经按照起始位置进行排序
例子:
输入: intervals = [2,6],[8,10],[15,18], newInterval = [13,16]
输出: [2,6],[8,10],[13,18]
解题思路
最简单的方式就是复用 Merge Intervals 的方法,只需先将新的数据区段加入集合即可,但这样效率不高。既然原来的数据段是有序且不重合的,那么我们只需要找到哪些数据段与新的数据段重合,把这些数据段合并,并加上它左右的数据段即可。AC源码
[code]# Definition for an interval. class Interval(object): def __init__(self, s=0, e=0): self.start = s self.end = e # To print the result def __str__(self): return "[" + str(self.start) + "," + str(self.end) + "]" class Solution(object): def insert(self, intervals, newInterval): start, end = newInterval.start, newInterval.end left = list(filter(lambda x: x.end < start, intervals)) right = list(filter(lambda x: x.start > end, intervals)) if len(left) + len(right) != len(intervals): start = min(start, intervals[len(left)].start) end = max(end, intervals[-len(right) - 1].end) return left + [Interval(start, end)] + right if __name__ == "__main__": intervals = Solution().insert([Interval(2, 6), Interval(8, 10), Interval(15, 18)], Interval(13, 16)) for interval in intervals: print(interval)
欢迎查看我的Github来获得相关源码。
相关文章推荐
- OAuth2学习及DotNetOpenAuth部分源码研究
- fstream 的用法——文件拷贝
- 局部二值化
- objective-c 中数据类型之中的一个 几何数据类型(CGPoint,CGSize,CGRect)
- "类型初始值设定项引发异常"
- BroadcastReceiver的区别细究
- 平面YUV422转平面RGB24 平面YUV420转平面YUV422 平面YUV420转RGB24
- C++中const关键字详解
- win10安装tomcat遇到的小问题
- 设计模式笔记--装饰模式
- Extjs学习----------动态载入js文件(减轻浏览器的压力)
- 商务英语句型11
- Quick-Cocos2dx-- 资源热更新2
- 紫金桥组态软件的DL/T 645-2007驱动
- ES6学习——类语法:Symbol.species在实例创建中的应用
- 在基于tomcat的web project中加载dll文件的方法(来源于实际项目经验)
- KMP算法
- meaven 下载Jar包
- 查看oracle数据库的连接数以及用户
- git学习笔记