欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间

Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间

2024/10/25 10:22:31 来源:https://blog.csdn.net/weixin_66442839/article/details/141339844  浏览:    关键词:Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间

题目:

题解:

type SummaryRanges struct {*redblacktree.Tree
}func Constructor() SummaryRanges {return SummaryRanges{redblacktree.NewWithIntComparator()}
}func (ranges *SummaryRanges) AddNum(val int) {// 找到 l0 最大的且满足 l0 <= val 的区间 interval0 = [l0, r0]interval0, has0 := ranges.Floor(val)if has0 && val <= interval0.Value.(int) {// 情况一return}// 找到 l1 最小的且满足 l1 > val 的区间 interval1 = [l1, r1]// 在有序集合中,interval1 就是 interval0 的后一个区间interval1 := ranges.Iterator()if has0 {interval1 = ranges.IteratorAt(interval0)}has1 := interval1.Next()leftAside := has0 && interval0.Value.(int)+1 == valrightAside := has1 && interval1.Key().(int)-1 == valif leftAside && rightAside {// 情况四interval0.Value = interval1.Value().(int)ranges.Remove(interval1.Key())} else if leftAside {// 情况二interval0.Value = val} else if rightAside {// 情况三right := interval1.Value().(int)ranges.Remove(interval1.Key())ranges.Put(val, right)} else {// 情况五ranges.Put(val, val)}
}func (ranges *SummaryRanges) GetIntervals() [][]int {ans := make([][]int, 0, ranges.Size())for it := ranges.Iterator(); it.Next(); {ans = append(ans, []int{it.Key().(int), it.Value().(int)})}return ans
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com