在一维坐标轴上有n个区间段,求重合区间最长的两个区间段

来源:互联网 发布:hadoop和云计算 编辑:程序博客网 时间:2024/06/05 15:44

方法:讲区间排序,排序规则为先按区间左边排序,左边相等的情况下按右边排序。之后逐个比较。

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;}


0 0