56. 合并区间
->用sort()函数排序:按a[0],a[1]大小排序
判断区间重叠:eg- a=[1,4] b=[2,3]
a[1]>b[0]
左边位置为a[0],右边位置为max(a[1],b[1])
所以区间是[1,4]
-<代码:
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort()
res = [intervals[0]]
for x,y in intervals[1:]:
if res[-1][1]<x:
res.append([x,y])
else:
res[-1][1]=max(y,res[-1][1])
return res
#双指针解法
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort() #排序列表,以区间开头升序排列
ans = [intervals[0]]
L, R = 1, 0
while L < len(intervals):
if ans[R][1] < intervals[L][0]: #如果区间不重合,直接append
ans.append(intervals[L])
L += 1
R += 1
else: #如果区间重合,就合并区间
ans[R] = [ans[R][0], max(ans[R][1], intervals[L][1])]
L += 1
return ans
57. 插入区间
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
intervals.append(newInterval)
intervals.sort()
res = [intervals[0]]
for x,y in intervals[1:]:
if res[-1][1]<x:
res.append([x,y]) #以数组的形式存储
else:
res[-1][1]=max(y,res[-1][1]) #比较b[1]和a[1]
return res