日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/5/22 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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难度的全部內容,希望文章能夠幫你解決所遇到的問題。

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