当前位置: 首页 > news >正文

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
}

http://www.mrgr.cn/news/1574.html

相关文章:

  • 16:【stm32】I2C的使用一:I2C片上外设的使用
  • 记录一次edu web端渗透测试实录
  • C#与其它编程语言有什么区别,以及相关优势有哪些
  • Windows禁止应用联网
  • Awesome-Chinese-LLM:收集和梳理中文LLM相关的开源模型、应用、数据集及教程等资料
  • Android about event log
  • Java设计模式之中介者模式
  • EmguCV学习笔记 VB.Net 3.1 直线
  • python工具--mysql2doris的datax json生成工具
  • C语言整数溢出的问题
  • 智能驾驶时代的中控屏UI设计创新
  • android13隐藏调节声音进度条下面的设置按钮
  • 开放式耳机哪种好用?开放式种草测评!
  • 网络热门编程项目导学:尚医通
  • 【C++深度探索】unordered_set、unordered_map封装
  • 全栈笔记_浏览器工作原理篇(浏览器架构)
  • Spring 中 @EnableAspectJAutoProxy 注解未生效的原因及解决方案
  • 【概率论与数理统计】学习线路
  • 支付网站屡遭CC攻击,高防ip能防CC攻击吗?
  • 分布式ID-一窥雪花算法的原生实现问题与解决方案(CosId)