给出若干组持仓开始时间 ,持仓结束时间,求持仓总时间 多段时间可能有交集
时间: 2023-11-14 16:13:10 浏览: 35
假设给出的若干组持仓开始时间和持仓结束时间分别为 $(s_1, e_1), (s_2, e_2), \ldots, (s_n, e_n)$。我们可以将这些时间按照起始时间从小到大排序,然后遍历这些时间段,依次计算它们的贡献。具体来说,我们可以用一个变量 $last$ 表示当前已经计算过的时间段的结束时间,初始值为 $-\infty$。然后遍历每个时间段 $(s_i, e_i)$,如果 $s_i \leq last$,说明这个时间段与之前的某个时间段有交集,我们只需要更新 $last$ 为 $e_i$,即当前时间段结束的时间。否则,这个时间段与之前的所有时间段都没有交集,我们需要加上这个时间段的持续时间 $e_i - s_i$。最后遍历完所有时间段后,我们就得到了持仓总时间。
下面是 Python 代码实现:
```python
def total_holding_time(intervals):
intervals.sort()
last = -float('inf')
total_time = 0
for s, e in intervals:
if s <= last:
last = max(last, e)
else:
total_time += e - s
last = e
return total_time
```
其中,参数 intervals 是一个列表,每个元素是一个二元组,表示一个时间段的起始时间和结束时间。函数返回持仓总时间。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)