2016-12-16 84 views
1

我正在c#中製作一個複雜的算法,其中一步是比較兩個非常大的範圍列表並找出重疊區域。我嘗試了很多方法來找到它們,但我不確定我是否覆蓋了所有的可能性。此外,我在這一步的算法對於大量的列表來說耗時過長。查找c#中兩個整數範圍之間的重疊區域

實施例:

範圍1 = 1-400

範圍2 = 200-600

所以當欲這兩個範圍之間的重疊檢查我應該得到

答案= 200

因爲總200號這兩個範圍之間的重疊。所以這就是我想要的答案,我想要在兩個範圍之間重疊的確切數量的整數。解釋的

實施例:

List1中:1-400,401-800,801-1200等.... 列表2:10240-10276,10420 10456,11646- 11682等等......

現在我必須將列表1的每個範圍與列表2的每個範圍進行比較,並確定列表1的某個範圍是否與列表2的任何範圍重疊,如果是,那麼是什麼是重疊的答案嗎?這些只是樣本值,所以讓你明白。

我只需要一個簡單和最有效/快速的公式來找出2個範圍之間的重疊答案我可以管理其餘的循環算法。

示例公式

var OverlappingValue = FindOverlapping(range1.StartValue, range1.EndValue,range2.StartValue, range2.EndValue); 

,如果這兩個範圍不重疊的話,那麼函數必須返回提前 PS 0 感謝:我沒有張貼我的代碼BCZ它真的複雜有很多條件,我只需要一個簡單的公式。謝謝。

+0

你可以做400-200嗎? –

+0

if range2.start

+0

@OscarSiauw您還必須檢查range1.start是否位於range2.end之前或之後,以及如果range2.end位於range1.end之前或之後。 – juharr

回答

6

如果有重疊範圍,它必須從最大下界開始到最小上限,所以只需使用「公式」
然後通過減去它的上限到下一個,然後加上一個(全部包含)
最後,如果該金額爲負則意味着範圍沒有重疊所以剛拿到量和0之間的最大值來處理這種情況

編輯:哎呀C#不VB。網

int FindOverlapping (int start1, int end1, int start2, int end1) 
{ 
    return Math.Max (0, Math.Min (end1, end2) - Math.Max (start1, start2) + 1); 
} 
+0

非常感謝,你給我正是我需要的,完美的功能只有一條線,它完全有道理。再次感謝 :) – touseef