代码仓库:Github | Leetcode solutions @doubleZ0108 from Peking University.
- 解法1(T76% S64%): 先按照左端点排序,然后一次遍历进行合并,用一个结果栈,栈顶始终是等待跟下个合并的状态,如果当前的左端点比栈顶右端点小则二者可以合并,注意合并时左端点不一定谁小、右端点不一定谁大,直接通过min和max选取即可
- 注意可能连续合并
- 解法2: 直接开一个1~10000的bool数组,按照intervals一个一个填进去,最后扫描一遍就可以
- 有个问题 [1,2] [3,4]是不应该合并成[1,4]的,可以将其变为[2,4][6,8]就有间隔了,最后再除个2就可以了
class Solution(object):
def merge(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: List[List[int]]
"""
if len(intervals) < 2:
return intervals
intervals.sort(key=lambda x: x[0])
ans = [intervals[0]]
for i in range(1, len(intervals)):
if intervals[i][0] <= ans[-1][-1]:
ans[-1] = [min(intervals[i][0], ans[-1][0]), max(intervals[i][1], ans[-1][1])]
else:
ans.append(intervals[i])
return
本文介绍了两种解决区间合并问题的方法。解法1是先按左端点排序,使用栈进行合并,确保没有重叠。解法2是通过填充布尔数组,然后扫描得到合并后的区间。代码实现中给出了具体的Python类Solution的merge方法。注意,区间[1,2][3,4]不应合并为[1,4],需要保持间隔。
283

被折叠的 条评论
为什么被折叠?



