LeetCode第6313题-统计将重叠区间合并成组的方案数-python实现-图解思路与手撕代码
文章目录
一、题目描述
二、解题思路与代码实现
1.解题思路
令合并之后的区间数为m,方案数就是2**m,按照要求取余返回即可。
合并区间的思路:
首先对数组按照左端点大小进行排序,
然后遍历区间,将每个区间的左端点和最大区间右端点进行比较,如果大于,那就是两个区间,区间数加一,如果小于,那就是一个区间,需要合并,最后更新最大区间右端点。
2.代码实现
代码如下(示例):
class Solution:
def countWays(self, ranges: List[List[int]]) -> int:
# 对数组进行排序,按照左端点大小排序
ranges.sort(key=lambda p:p[0])
# 遍历每一个区间,将左端点和第一个区间的右端点进行比较
m=1
max_right=ranges[0][1]
# 如果大于右端点,那就是两个区间,区间数m加一
# 如果小于右端点,那就是一个区间,m不变
for l,r in ranges:
m+=l>max_right
max_right=max(max_right,r)
# 对于区间数m,最后方案数是2**m,取余返回即可
return pow(2,m,10**9+7)