tou*_*bsb 3 c# intersection range .net-core
我在c#中制作一个复杂的算法,其中一步是比较2个非常大的范围列表并找出重叠区域.我已经尝试了很多方法来找到它们,但我不确定我是否涵盖了所有可能性.此外,我在这一步的算法对于大量列表来说花费的时间太长了.
示例:
范围1 = 1-400
范围2 = 200-600
所以当我想检查这两个范围之间的重叠时,我应该得到
答案= 200
因为这两个范围之间总共有200个数字重叠.所以这就是我想要的答案,我想要两个范围之间重叠的整数的确切数量.
列表示例:
清单1:1-400,401-800,801-1200等......清单2:10240-10276,10420 10456,11664-11682等...
现在我必须将列表1的每个范围与列表2的每个范围进行比较,并找出list1的某个范围是否与list2的任何范围重叠,如果是,那么重叠的答案是什么?这些只是样本值所以让你明白
我只需要一个简单而有效/快速的公式来找出2个范围之间的重叠答案,我可以管理其余的循环算法.
示例公式:
var OverlappingValue = FindOverlapping(range1.StartValue, range1.EndValue,range2.StartValue, range2.EndValue);
Run Code Online (Sandbox Code Playgroud)
如果两个范围完全没有重叠,那么函数必须返回0 提前谢谢PS:我没有发布我的代码bcz它真的很复杂有很多条件,我只需要一个简单的公式.谢谢.
如果有任何重叠范围; 它必须从最大下限开始到最小上限,所以只需使用那个"公式"
然后只需通过将它的上限减去它的下限来获得该范围内的项目数量并添加一个(全部包含)
最后如果该金额为负数表示该范围不重叠,因此只需获得该金额与0之间的最大值即可处理该情况
编辑:哎呀C#不是VB.Net
int FindOverlapping (int start1, int end1, int start2, int end1)
{
return Math.Max (0, Math.Min (end1, end2) - Math.Max (start1, start2) + 1);
}
Run Code Online (Sandbox Code Playgroud)