LeetCode 295. 数据流的中位数(大小堆)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 295. 数据流的中位数(大小堆)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 大小堆解題
1. 題目
中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。
例如, [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進階: 如果數據流中所有整數都在 0 到 100 范圍內,你將如何優化你的算法? 如果數據流中 99% 的整數都在 0 到 100 范圍內,你將如何優化你的算法?來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-median-from-data-stream
《劍指Offer》同題:面試題41. 數據流中的中位數 鏈接
2. 大小堆解題
參考我的博客 數據結構 堆(優先隊列)
類似題目:
LeetCode 480. 滑動窗口中位數(大小堆升級版+set實現)
LeetCode 703. 數據流中的第K大元素(優先隊列)
- 建立大頂堆(存放數據中較小的部分),小頂堆(存放較大的部分)
- 同時維護兩個堆的大小相等或者大頂堆多一個
- 那么兩個堆的堆頂就是中間的數據,根據奇偶,輸出堆頂
總結
以上是生活随笔為你收集整理的LeetCode 295. 数据流的中位数(大小堆)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 773. 滑动谜题(B
- 下一篇: LeetCode 131. 分割回文串(