首页
/
每日頭條
/
科技
/
算法不需要初始狀态的數據信息
算法不需要初始狀态的數據信息
更新时间:2025-07-01 07:05:52

算法不需要初始狀态的數據信息?題目:如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位于中間的數值如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值,下面我們就來聊聊關于算法不需要初始狀态的數據信息?接下來我們就一起去了解一下吧!

算法不需要初始狀态的數據信息(數據流中的中位數)1

算法不需要初始狀态的數據信息

題目:

如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位于中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。

例如,

[2,3,4] 的中位數是 3

[2,3] 的中位數是 (2 3) / 2 = 2.5

設計一個支持以下兩種操作的數據結構:

1. void addNum(int num) - 從數據流中添加一個整數到數據結構中。

2. double findMedian() - 返回目前所有元素的中位數。

示例:

輸入:

["MedianFinder","addNum","addNum","findMedian","addNum","findMedian"]

[[],[1],[2],[],[3],[]]

輸出:[null,null,null,1.50000,null,2.00000]

思路:

把數組分成兩部分,第一部分的最大值和第二部分的最小值就是求中位數需要的元素。

可以維護兩個堆:第一部分數據用大頂堆,第二部分數據用小頂堆。

遍曆數組的過程中,維護這兩個堆:

1. 如果當前元素比大頂堆小,則插入大頂堆;

2. 如果兩個堆的大小差距查過1,則在兩個堆之間遷移元素;

遍曆數組完成後,從兩個堆裡計算中位數:

如果兩個堆大小相同,中位數=兩個堆的堆頂元素之和/2

如果兩個堆大小不同,取個數較大的堆的堆頂元素。

代碼:

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

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
高端手機市場蘋果占有率
高端手機市場蘋果占有率
9月21日,市場研究機構Counterpoint發布了2022年第二季度全球智能手機市場的份額數據。從出貨量來看,在今年第二季度,聯發科以39%的份額遙遙領先,引領了中低端智能手機處理器市場,有賴于天玑700系列産品的熱銷;高通以29%的份...
2025-07-01
點淘達人招募
點淘達人招募
你是否有過這樣的經曆?為了家庭放棄了工作柴米油鹽消磨了鬥志和沖勁渴望找回自己的社會價值?擁有大把空閑時間卻都用在和左鄰右舍閑聊打趣想做些事充實自己卻不知道從何入手?寶媽家庭主婦也想兼顧家庭與事業,帶娃之餘希望能有一筆亮眼收入。小陳上班時間自...
2025-07-01
蘋果手機攝像頭抖動是怎麼回事
蘋果手機攝像頭抖動是怎麼回事
蘋果手機攝像頭抖動是怎麼回事?具備防抖功能的蘋果手機在啟動相機功能時,攝像頭傳感器根據環境自動調整位置(可聽到攝像頭馬達發出的哒哒聲),屬于正常現象,我來為大家講解一下關于蘋果手機攝像頭抖動是怎麼回事?跟着小編一起來看一看吧!蘋果手機攝像頭...
2025-07-01
半夏厚樸湯的威力
半夏厚樸湯的威力
半夏厚樸湯的威力?李女士,55歲,初診訴兩個月前和鄰居吵架後出現喉頭似有物堵塞,咽部似有痰,但無法咳出,症狀時輕時重,但不影響飲食飲食較少,低熱,腰酸,脘腹脹滿,近期經常失眠多夢,大小便正常,咽喉鏡檢查未見異常,舌苔膩,脈弦滑,接下來我們就...
2025-07-01
武林外傳手遊全攻略
武林外傳手遊全攻略
《武林外傳手遊》額滴萌寵版本今日正式上線啦!萌寵現身,江湖伴遊~超多種類百變外觀,乖巧呆萌、憨厚可愛任君選!服務器現在已經全面開放,趕快登錄遊戲體驗全新玩法吧!武林外傳手遊全新寵物系統包括獲取、養育、戰鬥、傳承、佩飾等多種玩法,完成引導任務...
2025-07-01
Copyright 2023-2025 - www.tftnews.com All Rights Reserved