LeetCode.295數據流的中位數詳解

問題描述

中位數是有序整數列表中的中間值。如果列表的大小是偶數,則沒有中間值,中位數是兩個中間值的平均值。

  • 例如?arr = [2,3,4]?的中位數是?3?。
  • 例如?arr = [2,3]?的中位數是?(2 + 3) / 2 = 2.5?。

實現 MedianFinder 類:

  • MedianFinder() 初始化?MedianFinder?對象。

  • void addNum(int num)?將數據流中的整數?num?添加到數據結構中。

  • double findMedian()?返回到目前為止所有元素的中位數。與實際答案相差?10-5?以內的答案將被接受。

解題思路

為什么使用兩個堆?

在面對數據流時,我們往往需要實時添加元素并頻繁查詢中位數。使用數組或列表雖然簡單,但每次添加元素后要求的排序操作是低效的。為了優化這一過程,可以采用兩個堆來分別維護數據的較小部分和較大部分:

  • 最大堆用來存儲當前元素的較小一半,堆頂是這部分元素的最大值。
  • 最小堆存儲較大一半的元素,其堆頂是這部分元素的最小值。

這種結構使得我們可以在對數時間內調整堆并找到中位數,非常適合處理大規模數據。

代碼實現

class MedianFinder {
private:// 最大堆存儲較小一半元素std::priority_queue<int, std::vector<int>, std::less<int>> maxHeap;// 最小堆存儲較大一半元素std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;public:MedianFinder() {}void addNum(int num) {// 先添加到最大堆maxHeap.push(num);// 保持兩個堆的平衡// 將最大堆的最大值轉移到最小堆minHeap.push(maxHeap.top());maxHeap.pop();// 如果最小堆元素多于最大堆,調整以保持平衡if (minHeap.size() > maxHeap.size()) {maxHeap.push(minHeap.top());minHeap.pop();}}double findMedian() {// 如果兩個堆大小相等,取平均if (maxHeap.size() == minHeap.size()) {return (maxHeap.top() + minHeap.top()) / 2.0;} else {// 如果大小不等,最大堆的頂部元素即為中位數return maxHeap.top();}}
};/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36394.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36394.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Advantest 93000測試機中CLOCK DOMAIN 詳解

愛德萬測試&#xff08;Advantest&#xff09;的V93000系列測試系統是一個高度模塊化和可擴展的平臺&#xff0c;專為復雜和高性能的半導體器件測試而設計&#xff0c;包括系統級芯片&#xff08;SoC&#xff09;、存儲器、射頻&#xff08;RF&#xff09;和混合信號器件等。在…

剪畫小程序:從失業到自媒體:37歲的勇敢轉身!

37歲啦&#xff0c;按說這年紀工作該穩穩當當&#xff0c;家庭也和和美美。可誰能想到&#xff0c;我竟然失業了&#xff01;當時啊&#xff0c;心里頭那叫一個迷茫、焦慮&#xff0c;感覺天都要塌下來了。 可日子還得過呀&#xff0c;總不能就這么被生活給打倒&#xff01;現在…

白敬亭章若楠甜度報表的難哄大師

#白敬亭章若楠&#xff0c;甜度爆表的難哄大師#&#x1f389;&#x1f389;&#x1f389;各位小伙伴們&#xff0c;你們還記得那個讓我們心跳加速、嘴角上揚的CP組合嗎&#xff1f;沒錯&#xff0c;就是白敬亭和章若楠&#xff01;他們可是憑借一部新劇&#xff0c;再次讓我們感…

antd中Select大數據分頁觸底刷新處理優化

平時使用antd中Select的下拉一般就幾十幾百條&#xff0c;這時候直接使用組件模糊查詢就能實現大部分業務場景需求。 今天遇到一個需要模糊查詢并且總量上萬條的下拉框&#xff0c;如果一次性懟上去上萬條&#xff0c;會造成瀏覽器卡頓。所以這邊采用后端分頁&#xff0c;前端…

希喂生骨肉凍干值得入手嗎?拯救瘦弱、增強抵抗力最強主食測評!

希喂生骨肉凍干值得入手嗎&#xff1f;很多小姐妹覺著自家貓咪太瘦了、體質不咋好&#xff0c;換季還敏感、掉毛、不吃東西&#xff0c;聽說生骨肉凍干好吸收、營養好&#xff0c;可以改善體質、拯救瘦弱、增強抵抗力&#xff0c;為了圖省事&#xff0c;開始盲入生骨肉凍干&…

盲盒小程序:線上盲盒發展機遇

盲盒已經成為了當下年輕人的潮玩首選方式。隨著二次元、影視行業的快速發展&#xff0c;給盲盒提供了各種新的發展方向&#xff0c;盲盒商品也在不斷創新&#xff0c;種類豐富多樣。玩家在拆盲盒時隨機獲得某一商品&#xff0c;具有驚喜感和刺激性。 目前&#xff0c;隨著小程…

194.回溯算法:組合總和||(力扣)

代碼解決 class Solution { public:vector<int> res; // 當前組合的臨時存儲vector<vector<int>> result; // 存儲所有符合條件的組合// 回溯函數void backtracing(vector<int>& candidates, int target, int flag, int index, vector<bool>…

怎么優化亞馬遜Listing?看這一篇就夠了!

運營亞馬遜最重要的工作之一就是優化listing&#xff0c;精心優化好亞馬遜標題、五點描述、圖片和關鍵詞才能提高產品的可見性和吸引力&#xff0c;很多小伙伴對于怎么寫出專業的亞馬遜listing還是不知道如何下手&#xff0c;今天為大家分享一套實用的亞馬遜listing優化指南&am…

java 簡單零錢通

目標 面向過程版 代碼 package new_pluse;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class change_common{public static void main(String arg[]){//定義相關變量Scanner scanner new Scanner(System.in);String key&qu…

【深度學習】機器學習基礎

機器學習就是讓機器具備找一個函數的能力 帶有未知的參數的函數稱為模型 通常一個模型的修改&#xff0c;往往來自于對這個問題的理解&#xff0c;即領域知識。 損失函數 平均絕對誤差&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09; 均方誤差&#xff08;Mea…

全面解讀OA系統:功能、價值及應用

反復溝通、來回跑腿&#xff0c;還易出錯&#xff1b; 紙筆記錄、excel統計&#xff0c;效率低耽誤事&#xff1b; 檔案、物資&#xff0c;查不清記錄、看不了實時&#xff1b; 部門各做各的、各管各的&#xff0c;溝通配合難…… 你有沒有經歷過諸如上述的繁瑣辦公流程&am…

打包下載怎么實現?

down_zbUploadClearfile({ //http接口 name:1 time:7, }).then(async (res) > { if (res) { this.selectData []; const zip new JSZip(); zip.generateAsync({ type: "object" }).then(() > { const downloadUrl window.URL.createObjectURL(res); …

Python中使用MySQL模糊查詢的方法

1.方法一&#xff1a;使用pymysql庫的方法 當在Python中使用MySQL進行模糊查詢時&#xff0c;我們通常會使用pymysql或mysql-connector-python這樣的庫來連接MySQL數據庫并執行查詢。以下是一個使用pymysql進行模糊查詢的詳細示例&#xff0c;包括安裝庫、連接數據庫、執行查詢…

MSA 助力實驗室測量更穩定、更準確

在汽車制造、石油化工、電子制造等行業,產品的質量和性能需要通過準確的測量來保證。但是由于測量設備的誤差、操作人員的主觀影響以及環境條件的干擾等因素會導致測量系統出現各種問題,且這些問題會導致測量結果不準確,從而影響產品質量。 隨著工業信息化的迅速發展, 各行業對…

松下的臺燈值得入手嗎?書客、飛利浦熱門品牌橫評分享!

自從兒子步入小學&#xff0c;他埋首于書桌前的時光愈發冗長&#xff0c;很欣慰他能夠認真專心學習&#xff0c;卻也隱隱擔憂他的視力健康。在了解視力健康中發現長時間在過暗或過亮的光線環境下學習&#xff0c;會導致瞳孔頻繁地收縮與擴張&#xff0c;極易引發視覺疲勞。更令…

Python 基礎:用 json 模塊存儲和讀取數據

目錄 一、用 json 存儲數據二、用 json 讀取數據 遇到看不明白的地方&#xff0c;歡迎在評論中留言吶&#xff0c;一起討論&#xff0c;一起進步&#xff01; 本文參考&#xff1a;《Python編程&#xff1a;從入門到實踐&#xff08;第2版&#xff09;》 用戶關閉程序時&#…

HTML5 WebSocket:實時通信的新篇章

隨著互聯網技術的飛速發展&#xff0c;實時交互成為現代Web應用不可或缺的一部分。在這一背景下&#xff0c;HTML5引入了WebSocket協議&#xff0c;徹底改變了傳統的客戶端與服務器之間的通信方式&#xff0c;為開發者提供了一種高效、全雙工、低延遲的數據傳輸通道。本文將深入…

構建LangChain應用程序的示例代碼:45、如何利用大型語言模型(LLMs)和 Python 庫 SymPy 進行符號數學計算的教程

這個文件是一個關于如何使用大型語言模型和 Python 進行符號數學計算的示例。它主要展示了如何求解導數、積分、線性方程和微分方程。底層技術棧包括 SymPy&#xff0c;一個 Python 的符號數學庫&#xff0c;以及 OpenAI 的 API&#xff0c;用于生成確定性的結果。 LLM 符號數…

無門檻代理SSL證書入門指南

隨著網絡安全問題日益凸顯&#xff0c;SSL證書作為保障網絡數據傳輸安全的重要手段&#xff0c;其市場需求也在持續增長。因此&#xff0c;成為SSL證書代理不僅具有巨大的商業價值&#xff0c;更是提升網絡安全保障能力的關鍵步驟。本文將為您介紹如何快速無門檻代理SSL證書的方…

GMSB文章六:微生物SCFA關聯分析

歡迎大家關注全網生信學習者系列&#xff1a; WX公zhong號&#xff1a;生信學習者Xiao hong書&#xff1a;生信學習者知hu&#xff1a;生信學習者CDSN&#xff1a;生信學習者2 介紹 微生物短鏈脂肪酸&#xff08;SCFAs&#xff09;是由腸道微生物發酵膳食纖維、抗性淀粉、低…