2017-06-21 18 views
0

我們輸入了消耗的startTime,endTime和帶寬。 like在任何給定時間的最大帶寬

1234 5678 12 
2345 6789 10 
7900 8790 20 
6790 8123 8 

我們必須計算消耗的最大帶寬。如上所述,從輸入集{7900 8790}{6790 8123}開始將是28,因爲這些集具有交集。

什麼是最好的方法來解決它。

回答

1

使對

通過時間(在領帶+第一的情況下)這些對
{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

最簡單的方法應該像下面的僞代碼,它是O(n lg n)。另外我認爲你的答案應該是28,因爲[6790,8123]和[7900,8790]也有交集。

Sort_interval() 
int ans = 0, sum = 0; 
For each interval i 
    if interval i intersect with interval i-1 
     sum += bandwidth(i) 
    else 
     ans = max(ans, sum) 
     sum = bandwidth(i) 
Output ans 
+0

你怎麼區間整理?如果每間隔與以往的間隔相交,那麼你會輸出0,其他情況下也不會發生 –

+0

@PetarPetrovic排序由開始的時間間隔時間,它只是概述了這個想法的僞代碼,我沒有處理第一個時間間隔也沒有以前的時間間隔,如果你必須這樣說 – shole

相關問題