首页
/
每日頭條
/
科技
/
算法不需要初始狀态的數據信息
算法不需要初始狀态的數據信息
更新时间:2026-08-14 14:42:22

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

算法不需要初始狀态的數據信息(數據流中的中位數)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
推荐阅读
江蘇集萃有機光電技術研究所
江蘇集萃有機光電技術研究所
江蘇集萃有機光電技術研究所?環保材料與技術應用創新中心作為有機功能材料與應用技術研究所的核心平台,緊密圍繞國家“雙碳戰略”和“無廢城市”等重大政策導向,深度聚焦環保領域減污降碳重大難題,廣泛集聚政産學研用全方位平台資源,密切聯系一批具有多年...
2026-08-14
新手小白如何選擇電腦筆記本
新手小白如何選擇電腦筆記本
新手小白如何選擇電腦筆記本?我們用不同顔色标記出不同的産品定位,大緻分為三類:遊戲本、全能本、超薄本,現在小編就來說說關于新手小白如何選擇電腦筆記本?下面内容希望能幫助到你,我們來一起看看吧!新手小白如何選擇電腦筆記本我們用不同顔色标記出不...
2026-08-14
ps選框常用工具
ps選框常用工具
PS裡的選框工具内含四個工具,它們分别是矩形選框工具、橢圓選框工具、單行選框工具、單列選框工具,如果我們會利用好這些工具的話可以做出各種形狀的選區,本文介紹一些有關PS選框工具小技巧和小方法,讓你更好的使用PS選框工具。1工具/原料Adob...
2026-08-14
電腦上的快捷鍵大全怎麼設置
電腦上的快捷鍵大全怎麼設置
嘿~你知道嗎?學會快捷鍵,能使我們辦公更輕松!可是快捷鍵太多了,實在記不住啊!今天,小編整理了辦公最常用到的50個快捷鍵,建議大家收藏起來,免得以後找不到啦~一、F1-F12系列F1-F12是大家很容易忽略的,但是,它們的作用可不小哦~二、...
2026-08-14
macbook pro切換輸入法快捷鍵
macbook pro切換輸入法快捷鍵
還有沒有和小編一樣煩惱的,就是Mac電腦切換輸入法實在是太麻煩了!Mac電腦的輸入方式還隻能上下切換,想要找到自己的輸入方式總是很費時。今日小編就找出了一種能方便快捷的輸入法切換工具——自動切換輸入法!1、設定快捷!使用者可以設置快捷鍵來快...
2026-08-14
Copyright 2023-2026 - www.tftnews.com All Rights Reserved