LeetCode 56 Merge Intervals(Python实现及详解)
2017-08-01 11:27
756 查看
【题目】
Given a collection of intervals, merge all overlappingintervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
输入一个区间的list,返回一个list(合并了所有有重叠的区间之后的list)。
【思路】
(1)先将目标区间数组按X轴从小到大排序。例如:[2,3] [1,2] [6,9] ->[1,2] [2,3] [6,9]
(2)扫描排序后的目标区间数组,将这些区间合并成若干个互不相交的区间。例如 [2,3] [1,2] [6,9] ->[1,3] [6,9]
这里分三种情况:
l [1,3] [2,6] ->[1,6] 第一个区间的end大于等于第二个区间的start,同时第二个区间的end大于第一个区间的end
l [2,8] [3,5] ->[2,8] 第一个区间的end大于等于第二个区间的start,同时第二个区间的end小于第一个区间的end
l [1,2] [3,4] -> [1,2] [3,4] 第一个区间的end小于第二个区间的start
【Python代码】
# Definition for an interval.
class Interval(object):
def __init__(self, s=0, e=0):
self.start = s
self.end = e
class Solution(object):
def merge(self, intervals):
"""
:type intervals: List[Interval]
:rtype: List[Interval]
"""
intervals.sort(key = lambda x: x.start)#对于interval按照start排序
res = []
length1 = len(intervals)
for i in range(length1):
if res == []:
res.append(intervals[i])
else:
length2 = len(res)
if res[length2-1].start <=intervals[i].start <= res[length2 -1].end:
#如果正在插入的数据的开始值大于前一数据的起始值并小于其end
res[length2-1].end =max(intervals[i].end,res[length2 -1].end)
else:
res.append(intervals[i])
for i in range(length2):
print("[%d, %d]"%(res[i].start, res[i].end))
return res
if __name__ == '__main__':
s= Solution()
i1 = Interval(1,3)
i2 = Interval(8,10)
i3 = Interval(2,6)
i4 = Interval(15,18)
intervals = [i1,i2,i3,i4]
res = s.merge(intervals)
Given a collection of intervals, merge all overlappingintervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
输入一个区间的list,返回一个list(合并了所有有重叠的区间之后的list)。
【思路】
(1)先将目标区间数组按X轴从小到大排序。例如:[2,3] [1,2] [6,9] ->[1,2] [2,3] [6,9]
(2)扫描排序后的目标区间数组,将这些区间合并成若干个互不相交的区间。例如 [2,3] [1,2] [6,9] ->[1,3] [6,9]
这里分三种情况:
l [1,3] [2,6] ->[1,6] 第一个区间的end大于等于第二个区间的start,同时第二个区间的end大于第一个区间的end
l [2,8] [3,5] ->[2,8] 第一个区间的end大于等于第二个区间的start,同时第二个区间的end小于第一个区间的end
l [1,2] [3,4] -> [1,2] [3,4] 第一个区间的end小于第二个区间的start
【Python代码】
# Definition for an interval.
class Interval(object):
def __init__(self, s=0, e=0):
self.start = s
self.end = e
class Solution(object):
def merge(self, intervals):
"""
:type intervals: List[Interval]
:rtype: List[Interval]
"""
intervals.sort(key = lambda x: x.start)#对于interval按照start排序
res = []
length1 = len(intervals)
for i in range(length1):
if res == []:
res.append(intervals[i])
else:
length2 = len(res)
if res[length2-1].start <=intervals[i].start <= res[length2 -1].end:
#如果正在插入的数据的开始值大于前一数据的起始值并小于其end
res[length2-1].end =max(intervals[i].end,res[length2 -1].end)
else:
res.append(intervals[i])
for i in range(length2):
print("[%d, %d]"%(res[i].start, res[i].end))
return res
if __name__ == '__main__':
s= Solution()
i1 = Interval(1,3)
i2 = Interval(8,10)
i3 = Interval(2,6)
i4 = Interval(15,18)
intervals = [i1,i2,i3,i4]
res = s.merge(intervals)
相关文章推荐
- LeetCode 71 Simplify Path(Python详解及实现)
- LeetCode 61. Rotate List(Python详解及实现)
- LeetCode 78 Subsets (Python详解及实现)
- LeetCode 76 Minimum Window Substring(Python详解及实现)
- 25_LeetCode 82&83. Remove Duplicates from Sorted List(II) (Python详解及实现)
- LeetCode 72 Edit Distance(Python详解及实现)
- LeetCode 66 Plus One (Python详解及实现)
- LeetCode 87 Scramble String (Python详解及实现)
- LeetCode 92 Reverse Linked List II (Python详解及实现)
- LeetCode 80 Remove Duplicates from Sorted Array II (Python详解及实现)
- LeetCode 93 Restore IP Addresses(Python详解及实现)
- LeetCode 55 Jump Game(Python 实现及详解)
- LeetCode 89 Gray Code (Python详解及实现)
- LeetCode 84 Largest Rectangle in Histogram (Python详解及实现)
- LeetCode 75 SortColor(Python详解及实现)
- LeetCode 90 SubsetsII (Python详解及实现)
- LeetCode 68 Text Justification(Python详解及实现)
- LeetCode 85 Maximal Rectangle (Python详解及实现)
- LeetCode 70 Climbing Stairs(Python详解及实现)
- LeetCode 77 Combinations (Python详解及实现)