日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Leetcode295 数据流中的中位数-最小堆和最大堆

發布時間:2025/4/5 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode295 数据流中的中位数-最小堆和最大堆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。
例如,[2,3,4] 的中位數是 3;[2,3] 的中位數是 (2 + 3) / 2 = 2.5
設計一個支持以下兩種操作的數據結構
void addNum(int num) - 從數據流中添加一個整數到數據結構中。
double findMedian() - 返回目前所有元素的中位數。
示例:

addNum(1) addNum(2) findMedian() -> 1.5 addNum(3) findMedian() -> 2

進階:
如果數據流中所有整數都在 0 到 100 范圍內,你將如何優化你的算法?
如果數據流中 99% 的整數都在 0 到 100 范圍內,你將如何優化你的算法?

來源:力扣(LeetCode)
鏈接:Leetcode295 數據流中的中位數

思路

優化解法,動態維護一個最大堆和一個最小堆。各存放一半數據,要求:最大堆的堆頂元素要比最小堆的堆頂元素小(這樣,最大堆里面的元素都比最小堆里面的值小)。

priority_queue<int> big_queue;//默認最大堆priority_queue< int,vector<int>,greater<int>> small_queue;//最小堆構造

按照最大堆和最小堆中元素個數分為三種情況討論:無非相等,最大堆元素多一個,最小堆元素對一個三種情況。當新來的元素num來的時候,即遇到如下三種情況分析:

  • 最大堆大小==最小堆大小
  • 最大堆大小>最小堆
  • 最大堆大小<最小堆
  • 使之滿足最小堆和最大堆滿足:元素個數相等,或者最大堆元素多一個,或者最小堆元素多一個。這樣中位數便可以在堆頂元素取得。無非是取平均值或者某一個堆頂元素。

    代碼

    class MedianFinder { public:/** initialize your data structure here. */MedianFinder() {}void addNum(int num) {if(big_queue.empty())//堆為空時,這里其實保證了兩個隊大小基本一樣{big_queue.push(num);return;}if(big_queue.size()==small_queue.size())//最大堆大小==最小堆大小{if(num<big_queue.top())big_queue.push(num);elsesmall_queue.push(num);}else if(big_queue.size()>small_queue.size())//最大堆大小>最小堆{if(num>big_queue.top())small_queue.push(num);else {small_queue.push(big_queue.top());big_queue.pop();big_queue.push(num);}}else if(big_queue.size()<small_queue.size())//最大堆大小<最小堆{if(num>small_queue.top()){small_queue.push(num);big_queue.push(small_queue.top());small_queue.pop();}else{big_queue.push(num);}}}double findMedian() {if(big_queue.size()==small_queue.size())//偶數時,返回兩者平均值return (small_queue.top()+big_queue.top())/2.0;else if(big_queue.size()>small_queue.size())return big_queue.top();return small_queue.top();}private:priority_queue<int> big_queue;priority_queue< int,vector<int>,greater<int>> small_queue; };/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

    測試結果:

    總結

    最小堆和最大堆結合,這樣可以提高算法速度。比直觀的使用數組排序并且查找中位數要快很多。

    總結

    以上是生活随笔為你收集整理的Leetcode295 数据流中的中位数-最小堆和最大堆的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久久久久久国产精品毛片 | 亚洲88| 久久黄网 | 少妇大叫太粗太大爽一区二区 | 茄子爱啪啪 | 国产三级免费观看 | 成人香蕉视频在线观看 | 人人澡人人射 | 国产传媒一区 | 日本大尺度吃奶做爰视频 | 丝袜福利视频 | 天天艹 | 日韩毛片在线免费观看 | 欧美激情啪啪 | 成人无码久久久久毛片 | 大奶子在线 | 亚洲一区二区在线电影 | 粗大的内捧猛烈进出 | 西欧毛片| 色就是色欧美 | 亚洲综合精品视频 | 黄久久久| 伊人网中文字幕 | 天堂精品视频 | 人人草人人爽 | 久久精品欧美一区二区三区不卡 | 免费污网站在线观看 | 成人超碰| www.狠狠操 | 日本人妻换人妻毛片 | 成年丰满熟妇午夜免费视频 | 日本黄色录相 | 久久靖品 | 日韩淫 | 亚洲色图3p | 久操网在线 | 性爱免费视频 | av毛片一区 | 中文字幕久久网 | 在线免费看毛片 | 久久久久久亚洲 | 欧美综合在线一区 | 性欧美videossex精品 | 糖心logo在线观看 | 苍井空亚洲精品aa片在线播放 | 亚洲人妻电影一区 | 网站黄在线 | 亚洲视频在线观看网址 | 欧美色妞网 | 成人福利在线观看 | 国产黄免费 | 久久久www| 欧美日韩精品在线视频 | 国产精品vip | 高清一级片 | 日韩欧美视频一区 | 三级av网站 | 午夜高清视频 | 欧美性猛交乱大交3 | 日日干夜夜爽 | 精品成人久久 | 日本乱论视频 | 亚洲综合精品在线 | 哺乳援交吃奶在线播放 | 就是色 | 337p粉嫩大胆色噜噜狠狠图片 | 欧美日韩在线观看一区 | 99精品欧美一区二区蜜桃免费 | 欧美中日韩在线 | 日韩黄色大全 | 国产三极片 | 亚洲特级毛片 | 91大神精品 | 国产欧美日韩精品区一区二污污污 | 人人插人人插 | 国产sm调教视频 | 91福利社在线观看 | 男生和女生靠逼视频 | 中文字幕在线有码 | 狠狠干男人的天堂 | 999毛片 | 国产精品无码一区二区三区 | 香蕉视频链接 | 日韩一级免费 | 国产精品国语对白 | 风流还珠之乱淫h文 | 殴美一级片| 一本到久久 | 欧美真人性野外做爰 | 久久高清免费视频 | 91在线视频在线观看 | 国产一区二区三区视频在线观看 | 免费观看黄色网址 | 免费人成自慰网站 | 最新色视频 | 中日韩免费视频 | 五月天天色| 久久97| 日韩欧美一二三 |