AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

区间合并

作者: 作者的头像   echomingzhu ,  2019-10-20 21:17:32 ,  所有人可见 ,  阅读 712


4


核心思想

把多个离散的区间按照交集合并起来

1.处理步骤

(1) 区间排序(一般左右端点)
(2) 扫描整个空间,判断当前待处理的区间 seg[i] 和维护的区间 st-ed的关系

2. 代码模板

// 区间合并
int merge(vector<std::pair<int, int>>& segs)
{
    if(segs.size() == 0) return 0;

    // 按照左端点进行排序
    sort(segs.begin(), segs.end());

    vector<std::pair<int, int>> res;
    // 扫描每个区间,维护当前区间,看每个区间和当前区间的关系(记得处理最后一个区间)
    int st = segs[0].first, ed = segs[0].second;
    for(int i = 1; i < segs.size(); i++)
    {
        if(segs[i].first > ed)
        {
            res.push_back({st, ed});
            st = segs[i].first;
            ed = segs[i].second;
        } else {
            ed = max(ed, segs[i].second);
        }
    }
    res.push_back({st, ed});

    return res.size();
}

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息