您的位置:首页 > 其它

区间集的覆盖长度

2015-10-08 20:06 246 查看
arr={[2,6],[3,8]} ret=6

arr={[0,8],[10,12]} ret=10

arr={[2,3]} ret=1

using namespace std;

typedef struct {
int begin;
int end;
}interval;

bool cmp(const interval &a,const interval &b)
{
if(a.begin==b.begin)     //左区间相等,则比较右区间
return a.end<b.end;
    return a.begin<b.begin;  //比较左区间
}

int foo(vector<interval> &arr)
{
    if(arr.empty())
return -1;
    sort(arr.begin(),arr.end(),cmp);
    int sum=arr[0].end-arr[0].begin;
    int size=arr.size();
   
    for(int i=1;i<size;++i){
        if(arr[i-1].end>=arr[i].begin)   //两区间有交集
    sum+=arr[i].end-arr[i-1].end;
else                             //两区间无交集
    sum+=arr[i].end-arr[i].begin;
    }
    return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: