我们输入了startTime,endTime和带宽消耗。 喜欢
1234 5678 12
2345 6789 10
7900 8790 20
6790 8123 8
我们必须计算消耗的最大带宽。与上面一样,输入集{7900 8790}{6790 8123}
将为28,因为这些集合具有交集。
解决问题的最佳方法是什么。
答案 0 :(得分:2)
成对
{t; v}
where
t=time
v = +bandwidth for start of interval or
-bandwidth for end of interval
按时间排序这些对的列表(如果是平局+第一个)。
1234; 12
5678; -12
2345; 10
6789; -10
7900; 20
8790;- 20
6790; 8
8123; -8
浏览此列表,将v添加到当前带宽值。达到最大值是您需要的
1234; 12 : 12
2345; 10 : 22
5678; -12 : 10
6789; -10 : 0
6790; 8 : 8
7900; 20 : 28
8123; -8 : 20
8790;- 20 : 0
答案 1 :(得分:0)
最简单的方法应该类似于以下伪代码,即td
。另外我认为你的例子答案应该是28,因为[6790,8123]和[7900,8790]也有交集。
O(n lg n)