我试图找到两个范围(int值)和(如果存在)之间的交集返回一个包含交集的起点和终点的数组
例如
range 1 : 2,5
range 2 : 4,7
result : 4,5
我发现了几个关于阵列之间交叉的其他主题,但没有人帮助我找到确切的交集 (我刚刚发现了一个有用的函数,如果交集存在但是没有告诉交叉点是什么,那么它会返回' true
我在alghoritms非常糟糕,所以我发现了一些问题,我真的很感激提示
由于
答案 0 :(得分:8)
这只是一些基本逻辑。
struct range
int start , end
range intersection(range a , range b)
//get the range with the smaller starting point (min) and greater start (max)
range min = (a.start < b.start ? a : b)
range max = (min == a ? b : a)
//min ends before max starts -> no intersection
if min.end < max.start
return null //the ranges don't intersect
return range(max.start , (min.end < max.end ? min.end : max.end))
答案 1 :(得分:0)
如果我理解正确-您想得到线对的交集
CALL
您期望交叉点会像:
const range = [
[8, 12], [17, 22]],
[[5, 11], [14, 18], [20, 23]];
通过获取startMax和endMin可以用两个周期完成操作,还可以使用索引将O(n)的复杂性降低
然后,Okey,现在我们需要构建函数来找到这些交点:
const result = [[8, 11], [17, 18], [20, 22]]