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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 295. 数据流的中位数 Hard难度

發布時間:2025/5/22 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 295. 数据流的中位数 Hard难度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

295. 數據流的中位數

題目:
中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。

例如,

[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

解題圖解:













class MedianFinder { public:/** initialize your data structure here. */priority_queue<int,vector<int>,less<int>> big_heap;priority_queue<int,vector<int>,greater<int>> small_heap;MedianFinder() {}void addNum(int num) {if(big_heap.empty()) {big_heap.push(num);return ;}if(big_heap.size()==small_heap.size()){if(num<big_heap.top()) big_heap.push(num);else{small_heap.push(num);}}else if(big_heap.size()>small_heap.size()){if(num>big_heap.top()){small_heap.push(num);}else{small_heap.push(big_heap.top());big_heap.pop();big_heap.push(num);}}else if(big_heap.size()<small_heap.size()){if(num<small_heap.top()) big_heap.push(num);else{big_heap.push(small_heap.top());small_heap.pop();small_heap.push(num);}}}double findMedian() {if(big_heap.size()==small_heap.size()) return (( big_heap.top()+small_heap.top())/2.0) ;else if(big_heap.size()>small_heap.size()) return big_heap.top();else return small_heap.top();} };/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

個人總結:這里最難受的就是大小堆大小不相等的時候,你要把num跟堆頂比較,把num跟堆大小比較大的比較,這是最重要的。

總結

以上是生活随笔為你收集整理的LeetCode 295. 数据流的中位数 Hard难度的全部內容,希望文章能夠幫你解決所遇到的問題。

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