LeetCode第6313题-统计将重叠区间合并成组的方案数-python实现-图解思路与手撕代码

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)

猜你喜欢

转载自blog.csdn.net/weixin_45271005/article/details/129345995