跳到主要内容

2580.统计将重叠区间合并成组的方案数

链接:2580.统计将重叠区间合并成组的方案数
难度:Medium
标签:数组、排序
简介:请你返回将 ranges 划分成两个组的 总方案数 。

题解 1 - python

  • 编辑时间:2024-03-27
  • 执行用时:120ms
  • 内存消耗:45.1MB
  • 编程语言:python
  • 解法介绍:并查集合并区间。
class UnionFind:
def __init__(self, n) -> None:
self.n = n
self.data = [i for i in range(0, n)]
self.sizes = [1] * n
self.cnt = n
def size(self, v: int) -> int:
return self.sizes[self.find(v)]
def find(self, v: int) -> int:
if self.data[v] != v:
self.data[v] = self.find(self.data[v])
return self.data[v]
def uni(self, v1: int, v2: int):
p1 = self.find(v1)
p2 = self.find(v2)
if p1 != p2:
self.sizes[p1] += self.sizes[p2]
self.cnt -= self.sizes[p2]
self.data[p2] = p1
def same(self, v1: int, v2: int):
return self.find(v1) == self.find(v2)
class Solution:
def countWays(self, ranges: List[List[int]]) -> int:
n = len(ranges)
ranges.sort()
uf = UnionFind(n)
idx = 0
while idx < n:
start, end = ranges[idx]
while idx + 1 < n and ranges[idx + 1][0] <= end:
end = max(end, ranges[idx + 1][1])
uf.uni(idx, idx + 1)
idx += 1
idx += 1
return (2 ** uf.cnt) % (10 ** 9 + 7)

题解 2 - python

  • 编辑时间:2024-03-27
  • 执行用时:94ms
  • 内存消耗:45.06MB
  • 编程语言:python
  • 解法介绍:排序后合并区间。
class Solution:
def countWays(self, ranges: List[List[int]]) -> int:
n = len(ranges)
ranges.sort()
idx = 0
cnt = 0
while idx < n:
start, end = ranges[idx]
cnt += 1
while idx + 1 < n and ranges[idx + 1][0] <= end:
end = max(end, ranges[idx + 1][1])
idx += 1
idx += 1
return pow(2, cnt, 10 ** 9 + 7)