acwing算法基础课笔记-区间合并
前言
将一些有交集的区间进行合并,这里记录一个比较快速的实现方式。
若两个区间只有端点相交,也认为可以合并
Ex:[1,3] [3,10]
例题
问题描述:
给定 n 个区间 ,要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含两个整数 l 和 r。
输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。
数据范围
输入样例:
1 | 5 |
解题思路
按区间左端点排序
扫描所有区间,将可能有交集的区间合并
每次维护一个“当前”的区间 st[__________] ed
扫描到第
i
个区间,与当前区间有三种关系:- 在当前区间内部
- 有交集
- 无交集
针对不同情况:
在维护的区间内部时,
st
和ed
不变若有交集,则
ed
后移,即维护的区间变长若无交集,则将现在维护的区间放入最终结果,并将第
i
个区间作为当前维护的区间
过程图示:
代码
1 |
|