[Leetcode][python]Insert Interval
2017-10-12 04:40
447 查看
题目大意
给出多个不重合的数据区段,现在插入一个数据区段,有重合的区段要进行合并。注意点:
所给的区段已经按照起始位置进行排序
解题思路
来自:https://shenjie1993.gitbooks.io/leetcode-python/057%20Insert%20Interval.html最简单的方式就是复用 Merge Intervals 的方法,只需先将新的数据区段加入集合即可,但这样效率不高。既然原来的数据段是有序且不重合的,那么我们只需要找到哪些数据段与新的数据段重合,把这些数据段合并,并加上它左右的数据段即可。
代码
复用Merge Intervals
class Solution(object): def insert(self, intervals, newInterval): """ :type intervals: List[Interval] :type newInterval: Interval :rtype: List[Interval] """ result = [] if not intervals: return [newInterval] intervals.append(newInterval) intervals.sort(key = lambda x: x.start) result.append(intervals[0]) for interval in intervals[1:]: prev = result[-1] if prev.end >= interval.start: prev.end = max(prev.end, interval.end) else: result.append(interval) return result
独立解法(效率较高)
class Solution(object): def insert(self, intervals, newInterval): """ :type intervals: List[Interval] :type newInterval: Interval :rtype: List[Interval] """ start, end = newInterval.start, newInterval.end left = list(filter(lambda x: x.end < start, intervals)) right = list(filter(lambda x: x.start > end, intervals)) print left, right if len(left) + len(right) != len(intervals): # 如果左边和右边的数量相加不等于原数量,则需要合并 start = min(start, intervals[len(left)].start) # len(left)是分开后左边区间的后面一个 end = max(end, intervals[-len(right) - 1].end) # -len(right) - 1是分开后右边区间的前面一个 return left + [Interval(start, end)] + right
总结
关于filter,list(filter(lambda x: x.end < start, intervals)),请看:
http://blog.csdn.net/shark0001/article/details/1363564
相关文章推荐
- 【LeetCode with Python】 Insert Interval
- leetcode 日经贴,python code -insert-interval
- [LeetCode]题解(python):057-Insert Interval
- [leetcode]Insert Interval @ Python
- leetcode: Insert Interval
- LeetCode--Insert Interval
- [LeetCode] Insert Interval
- [leetcode 57] Insert Interval (待修改)
- Leetcode:Insert Interval
- leetcode之Insert Interval 问题
- LeetCode-Insert Interval
- LeetCode57 Insert Interval
- [leetcode]Insert Interval
- [LeetCode] Insert Interval
- LeetCode Insert Interval
- [LeetCode] Merge Intervals、Insert Interval:
- [leetcode] Insert Interval
- leetcode 刷题之路 47 Insert Interval
- [leetcode] Insert Interval
- LeetCode Insert Interval