Golang | Leetcode Golang题解之第295题数据流的中位数
创始人
2024-11-24 23:06:31

题目:

题解:

type MedianFinder struct {     nums        *redblacktree.Tree     total       int     left, right iterator }  func Constructor() MedianFinder {     return MedianFinder{nums: redblacktree.NewWithIntComparator()} }  func (mf *MedianFinder) AddNum(num int) {     if count, has := mf.nums.Get(num); has {         mf.nums.Put(num, count.(int)+1)     } else {         mf.nums.Put(num, 1)     }     if mf.total == 0 {         it := mf.nums.Iterator()         it.Next()         mf.left = iterator{it, 1}         mf.right = mf.left     } else if mf.total%2 == 1 {         if num < mf.left.Key().(int) {             mf.left.prev()         } else {             mf.right.next()         }     } else {         if mf.left.Key().(int) < num && num < mf.right.Key().(int) {             mf.left.next()             mf.right.prev()         } else if num >= mf.right.Key().(int) {             mf.left.next()         } else {             mf.right.prev()             mf.left = mf.right         }     }     mf.total++ }  func (mf *MedianFinder) FindMedian() float64 {     return float64(mf.left.Key().(int)+mf.right.Key().(int)) / 2 }  type iterator struct {     redblacktree.Iterator     count int }  func (it *iterator) prev() {     if it.count > 1 {         it.count--     } else {         it.Prev()         it.count = it.Value().(int)     } }  func (it *iterator) next() {     if it.count < it.Value().(int) {         it.count++     } else {         it.Next()         it.count = 1     } }

相关内容

热门资讯

四大场景方案黑科技实景呈现 华... 5月8日,以“聚力三载,同行有为”为主题的华为坤灵5.8品牌日活动在深圳主会场盛大开启,并联动全国3...
2026流畅不卡顿云手机多开云... 随着云端技术不断成熟,云手机解决了本地设备性能不足、多开繁琐、长时间挂机损耗大等问题,成为越来越多人...
如何让AI“跑起来”?新华三发... 当前,AI高速发展能够为千行百业带来哪些机遇?我们又将面临哪些具体挑战? 峰会现场。 5月8日,以...
《人工智能终端智能化分级》系列... 5月8日上午,工信部在北京举办《人工智能终端智能化分级》(GB/Z 177—2026)系列国家标准发...
供需对接,10多家模速空间入驻... 王宛艺 摄 15平方米的房间,是原定10人左右的会议室。围坐的长桌坐不下,工作人员又搬来椅子,沿着墙...