找出两个数字范围是否相交的最佳方法是什么?
我的号码范围是3023-7430,现在我想测试以下哪个数字范围与它相交:<3000,3000-6000,6000-8000,8000-10000,> 10000.答案应该是3000-6000和6000-8000.
在任何编程语言中执行此操作的好的,有效的数学方法是什么?
只是一个伪代码猜测:
SetdetermineIntersectedRanges(Range range, Set setofRangesToTest) { Set results; foreach (rangeToTest in setofRangesToTest) do if (rangeToTest.end range.end) continue; // skip this one, its above our range results.add(rangeToTest); done return results; }
我会创建一个Range类,并给它一个方法boolean intersects(Range).然后你可以做一个
foreach(Range r : rangeset) { if (range.intersects(r)) res.add(r) }
或者,如果您使用一些Java 8风格的函数式编程以明确:
rangeset.stream().filter(range::intersects).collect(Collectors.toSet())
交叉路口本身就像
this.start <= other.end && this.end >= other.start