区间合并——分治

这篇博客探讨了如何解决区间合并问题,利用分治策略。首先介绍了一个适用于区间范围较小的情况,通过建立布尔数组来标识区间覆盖。然后,提出按区间左端点排序并分而治之的方法,分别考虑左、右区间合并,最终实现所有区间可能的合并。通过样例输入和输出解释了算法的工作原理。
摘要由CSDN通过智能技术生成

区间合并

给定 n 个闭区间 [ai; bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],是[1;2] 和 [3;4] 不可以合并。
我们的任务是判断这些区间是否可以最终合并为一个闭区间,如果可以,将这个闭区间输出,否则输出no。

样例输入
5
5 6
1 5
10 10
6 9
8 10
样例输出
1 10

思路1.
如果区间的端点范围很小,比如在范围[0,9999]。
可以开一个10000大小的bool数组,然后输入区间覆盖的范围都复制true。
则最后遍历数组,连续的true数据即为一个区间。
这种方法适用于区间范围小,区间的平均跨度不是很大

思路2.

首先,按区间的左端点排序
将要考察的区间分为二
考察
左区间能否合并
右区间能否合并
再考察在左右区间能否合并
最小规模的问题
一个区间可以合并
两个区间之间检查

#include <iostream>
#include <algorithm>
using namespace std;
struct block{
   
	int s,e;
};
bool cmp(block f, block e){
   
	if (f.s<e.s
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值