【LeetCode】剑指 Offer(22)
创始人
2024-06-01 23:32:29
0

目录

题目:剑指 Offer 41. 数据流中的中位数 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 41. 数据流中的中位数 - 力扣(Leetcode)

题目的接口:

class MedianFinder {
public:/** initialize your data structure here. */MedianFinder() {}void addNum(int num) {}double findMedian() {}
};/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

解题思路:

我的思路是:

通过优先级队列维护一个大堆,一个小堆;

输入数据的时候:

1. 如果两个堆size相同,先进大堆,大堆top再进小堆,维持大堆比小堆小;

2. 如果小堆size大于大堆,先进小堆,小堆top再进大堆,维持大堆比小堆小。

例:

现在两个堆大小相同,

所以2进大堆:

根据我们的思路,

再进小堆:

现在小堆比大堆大,

我们先让3进小堆:

然后,让小堆的top

再进大堆:

现在大堆和小堆又一样大了,

所以,4先进大堆:

然后让大堆的top

再进小堆:

 

通过观察上面的图解,我们可以清楚的观察到,

大堆和小堆实现了一个动态的平衡状态,

也让中位数的求解变成只需要观察他们的堆顶即可。

查找中位数的时候:

1. 如果小堆size大于大堆,返回小堆堆顶;

2. 如果两个堆size相等,返回两个堆堆顶的值*0.5(中位数)。

代码:

class MedianFinder {
public://建一个大堆priority_queue, less> max_q;//建一个小堆priority_queue, greater> min_q;MedianFinder() {}void addNum(int num) {//如果两个堆size相等if(max_q.size() == min_q.size()){//先进大堆,大堆top再进小堆,维持大堆比小堆小max_q.push(num);min_q.push(max_q.top());max_q.pop();}else//如果小堆size大于大堆{//先进小堆,小堆top再进大堆,维持大堆比小堆小min_q.push(num);max_q.push(min_q.top());min_q.pop();}}double findMedian() {//如果小堆size大于大堆,返回小堆堆顶//如果两个堆size相等,返回两个堆堆顶的值*0.5(中位数)return max_q.size() < min_q.size() ? min_q.top() : (max_q.top() + min_q.top()) * 0.5;}
};/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

相关内容

热门资讯

安卓系统对比骁龙,性能与生态的... 你有没有想过,为什么你的手机里装的是安卓系统,而不是苹果的iOS呢?又或者,为什么你的安卓手机里搭载...
qt程序安卓系统运行,基于Qt... 你有没有想过,为什么有些手机上的程序运行得那么顺畅,而有些却总是卡得让人抓狂?今天,就让我来给你揭秘...
安卓系统免费应用推荐,助你畅享... 手机里的应用是不是越来越多,有时候都挑花眼了呢?别急,今天我就来给你推荐一些安卓系统上的免费应用,让...
安卓系统视频通话app,打造无... 你有没有发现,现在手机上的视频通话功能越来越强大了?尤其是安卓系统上的那些视频通话app,简直让人爱...
安卓系统发现高危病毒,守护手机... 亲爱的手机用户们,最近可是有个大消息在安卓系统用户群里炸开了锅!没错,就是安卓系统发现了一款高危病毒...
安卓系统疯狂弹广告,揭秘广告软... 你有没有遇到过这种情况?手机里突然弹出一个广告,让你瞬间心情大崩溃?没错,说的就是安卓系统那让人头疼...
ebook 10进入安卓系统 你有没有发现,最近你的安卓手机里多了一个新伙伴——那就是电子书(ebook)10!没错,就是那个我们...
安卓系统如何调听筒,安卓系统调... 手机听筒声音突然变小了?别急,让我来教你如何轻松调教安卓系统的听筒,让它重新恢复活力!一、检查音量设...
安卓系统是怎么手机,解锁智能生... 你有没有想过,我们每天不离手的安卓手机,它背后的安卓系统究竟是怎么一回事呢?今天,就让我带你一探究竟...
安卓系统能代替windows系... 你有没有想过,我们日常使用的安卓系统和Windows系统,哪个才是真正的霸主呢?是不是有时候觉得安卓...
lp108安卓系统,功能特点与... 你有没有听说最近LP108安卓系统火得一塌糊涂?没错,就是那个让无数手机用户都为之疯狂的新系统!今天...
安卓系统挂载u盘,轻松实现数据... 你有没有想过,你的安卓手机或平板电脑突然变成了一个移动的U盘?没错,就是那种可以随意存取文件的神奇设...
i5 安卓系统,引领智能终端新... 你有没有想过,为什么你的手机总是卡得要命,而别人的手机却能流畅如丝?是不是因为你的手机搭载了那个传说...
安卓手机系统没有升级,揭秘潜在... 你有没有发现,你的安卓手机系统好像好久没升级了呢?是不是觉得有点out了?别急,今天就来给你详细聊聊...
安卓14系统定制v,创新功能与... 你知道吗?最近安卓系统又出新花样了!安卓14系统定制版V,这名字听起来就让人兴奋不已。今天,就让我带...
手机安卓系统越高越好,探索最新... 你有没有发现,每次手机更新系统,你的手机就像脱胎换骨了一样?没错,说的就是你,那个安卓手机!今天,咱...
鸿蒙系统怎么用回安卓,轻松实现... 你是不是也和我一样,对鸿蒙系统的新鲜感还没过,却又忍不住想回到熟悉的安卓世界?别急,今天就来手把手教...
苹果7跟安卓系统,性能对决与用... 你有没有想过,为什么苹果7那么受欢迎,而安卓系统却有着庞大的用户群体?今天,我们就来聊聊这个话题,看...
安卓手机刷简化系统,轻松实现流... 你有没有想过,你的安卓手机其实可以变得更加轻快、流畅呢?没错,就是通过刷简化系统!今天,就让我带你一...
社保掌上通安卓系统,轻松掌握在... 你有没有发现,现在的生活越来越离不开手机了?无论是购物、聊天还是办公,手机都能轻松搞定。这不,今天就...