【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();*/

过啦!!!

写在最后:

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

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

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

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

相关内容

热门资讯

我来教大家“韵味广东麻将辅助器... 韵味广东麻将这个游戏其实有挂的,确实是有挂的,需要了解加客服微信:【7198902】, 很多玩家在这...
我来教大家“安徽王牌辅助器ap... 我来教大家“安徽王牌辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“中至杭州麻将辅助器... 我来教大家“中至杭州麻将辅助器app官方下载最新版本更新”详细分享开挂;原来确实真的有挂(需添加指定...
我来教大家“牵手湖南麻将辅助器... 我来教大家“牵手湖南麻将辅助器app官方下载最新版本更新”详细分享开挂;原来确实真的有挂(需添加指定...
我来教大家“乐星辅助器app官... 我来教大家“乐星辅助器app官方下载最新版本更新”详细分享开挂是一款可以让一直输的玩家,快速成为一个...
我来教大家“梗来疯辅助器app... 我来教大家“梗来疯辅助器app官方下载最新版本更新”详细分享开挂是一款可以让一直输的玩家,快速成为一...
我来教大家“友缘茶馆辅助器ap... 您好:友缘茶馆确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发...
我来教大家“保利体育辅助器ap... 我来教大家“保利体育辅助器app官方下载最新版本更新”详细分享开挂一、保利体育AI软件牌型概率发牌机...
我来教大家“寓教娱乐辅助器ap... 我来教大家“寓教娱乐辅助器app官方下载最新版本更新”详细分享开挂是一款可以让一直输的玩家,快速成为...
我来教大家“衢州都莱辅助器ap... 我来教大家“衢州都莱辅助器app官方下载最新版本更新”详细分享开挂一、衢州都莱AI软件牌型概率发牌机...
我来教大家“聚乐竞技辅助器ap... 我来教大家“聚乐竞技辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“星火娱乐辅助器ap... 我来教大家“星火娱乐辅助器app官方下载最新版本更新”详细分享开挂一、星火娱乐AI软件牌型概率发牌机...
我来教大家“南天门辅助器app... 我来教大家“南天门辅助器app官方下载最新版本更新”详细分享开挂;原来确实真的有挂(需添加指定薇71...
我来教大家“手机麻将辅助器ap... 亲,手机麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,手机麻将的开挂软件,名...
我来教大家“陕南麻将辅助器ap... 您好,陕南麻将这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“四川自贡花麻将辅助... 我来教大家“四川自贡花麻将辅助器app官方下载最新版本更新”详细分享开挂一、四川自贡花麻将AI软件牌...
我来教大家“众乐贵州麻将辅助器... 众乐贵州麻将这个游戏其实有挂的,确实是有挂的,需要了解加客服微信:【7198902】, 很多玩家在这...
我来教大家“闲游娱乐辅助器ap... 我来教大家“闲游娱乐辅助器app官方下载最新版本更新”详细分享开挂;原来确实真的有挂(需添加指定薇7...
我来教大家“姐妹十三水辅助器a... 我来教大家“姐妹十三水辅助器app官方下载最新版本更新”详细分享开挂;原来确实真的有挂(需添加指定薇...
我来教大家“佛手在线辅助器ap... 我来教大家“佛手在线辅助器app官方下载最新版本更新”详细分享开挂;原来确实真的有挂(需添加指定薇7...