警示

WendyAsif 2025-02-20 1:11:21 2025-02-20 1:11:44

lint get_length(line a,line b){
    if(a.left>b.right||a.right<b.left) return 0;
    if(a.left>b.left) swap(a,b);
    return abs(b.left-a.right)+1;
}

上述计算 线段相交代码存在问题: abs(b.left - a.right) + 1 这一计算逻辑未能正确反映出两条线段相交部分的长度。

b.left 和 a.right 分别是两条线段的不同端点,用它们的差值来计算相交长度并不合理。

1.没有考虑所有相交情况(只考虑了最常见的相交)

两条线段相交存在多种情况,比如 a 线段完全包含 b 线段,或者 b 线段部分包含 a 线段等。原代码的逻辑没有全面考虑这些情况。

2.示例说明

a = {1, 5},b = {3, 7},按照正确的包含端点计算相交长度的方法,相交部分为 [3, 5],长度应该是 5 - 3 + 1 = 3。

按照代码 abs(b.left - a.right) + 1 = abs(3 - 5) + 1 = 3 正确。

a = {1, 7},b = {3, 5} 时,abs(b.left - a.right) + 1 = abs(3 - 7) + 1 = 5,这显然是错误的,正确的长度依然是 5 - 3 + 1 = 3。