区间集的覆盖长度

本文介绍了一种算法,用于计算一系列区间的合并结果,并返回合并后区间的总长度。算法通过排序、比较和累加操作实现。适用于区间合并问题的解决。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值