在javascript中获取两个范围之间的交集

时间:2015-08-17 12:54:31

标签: javascript algorithm math intersection

我试图找到两个范围(int值)和(如果存在)之间的交集返回一个包含交集的起点和终点的数组

例如

range 1 : 2,5
range 2 : 4,7

result : 4,5

我发现了几个关于阵列之间交叉的其他主题,但没有人帮助我找到确切的交集 (我刚刚发现了一个有用的函数,如果交集存在但是没有告诉交叉点是什么,那么它会返回' true

我在alghoritms非常糟糕,所以我发现了一些问题,我真的很感激提示

由于

2 个答案:

答案 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]]