Python程序:计算区间列表中总的唯一时长
假设我们有一个区间列表,每个列表表示一个区间 [开始, 结束](包含)。我们需要找到它覆盖的总唯一时长。
因此,如果输入类似于 intervals = [[2, 11],[13, 31],[41, 61]],则输出将为 50,因为总的唯一覆盖距离为 (11 - 2 + 1) = 10,然后 (31 - 13 + 1) = 19 和 (61 - 41 + 1) = 21,所以总计为 50。
为了解决这个问题,我们将遵循以下步骤:
- 如果 intervals 列表为空,则
- 返回 0
- 对列表 intervals 进行排序
- [start, end] := intervals[0]
- ans := 0
- 对于 intervals 中的每个开始和结束 (s, e),执行以下操作:
- 如果 s > end,则
- ans := ans + end - start + 1
- start := s, end := e
- 否则,
- end := max(end, e)
- 如果 s > end,则
- ans := ans + end - start + 1
- 返回 ans
让我们看看下面的实现,以便更好地理解:
示例
class Solution: def solve(self, intervals): if not intervals: return 0 intervals.sort() start, end = intervals[0] ans = 0 for s, e in intervals: if s > end: ans += end - start + 1 start = s end = e else: end = max(end, e) ans += end - start + 1 return ans ob = Solution() intervals = [[2, 11],[13, 31],[41, 61]] print(ob.solve(intervals))
输入
[[2, 11],[13, 31],[41, 61]]
输出
50
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP