方法:讲区间排序,排序规则为先按区间左边排序,左边相等的情况下按右边排序。之后逐个比较。
struct Position
{
int x;
int y;
};
int cmp(Position a, Position b)
{
if(a.x == b.x)
return (a.y < b.y);
else
return (a.x < b.x);
}
/*a是按x排序后的*/
int MaxShareLen(Position *a, int n)
{
assert(NULL !=a && n >0);
Position pivot = a[0];
int MaxLen = 0;
for(int i = 1 ; i < n ; ++i)
{
if(a[i].x >= pivot.y)
{
pivot = a[i];
continue;
}
else
{
if(a[i].y > pivot.y)
{
MaxLen = max(MaxLen,(pivot.y - a[i].x));
pivot = a[i];
}
else
{
MaxLen = max(MaxLen,(a[i].y - a[i].x));
}
}
}
return MaxLen;
}