lc352.将数据流变为多个不相交区间
目录
352.将数据流变为多个不相交区间
有序哈希
- 可以考虑将一个区间左值作为key,右值作为val进行哈希。
- 每次加入一个值考虑其最近的两个区间,这里可以考虑第一个左值大于该值的区间
p1={l1,r1}
和最后一个左值小于等于该值的区间p0={l0,r0}
。 - p1可以通过
upper_bound()
得到,p0
可以通过迭代器prev
得到,这里主要考虑p1
前面没有元素的情况。prev(it, n = 1)
获取迭代器的第前n个元素指针,默认n为1next(it, n = 1)
获取迭代器的第后n个元素指针,默认n为1
- 考虑一下五种情况
l0<=val<=r0
在p0
区间内,则加入该值不需要任何操作,直接返回即可。val == r0 + 1 && val == l1 - 1
,这个时候需要合并两个区间,注意需要提前存储节点值,之后删除结点,合并后的区间为{l0, r1}
val == r0 + 1 && val != l1 - 1
,这个时候需要扩展p0
区间,p0={l0, val}
val != r0 + 1 && val == l1 - 1
,这个时候需要扩展p1
区间,p1={val, r1}
val
不满足以上任何一种情况,{val, val}
单独是一个区间
|
|